CLI 기반 파일 매니저를 사용해보자 - yazi
왜 터미널 기반 파일 매너저가 필요할까?
윈도우와 맥에서는 각각 파일 매니저로 file explorer와 finder가 사용된다.
이들은 공통적으로 gui 기반 프로그램이다. 그래서 이들은 터미널에서 실행되는 것이 아니라 이를 위해 별도로 window를 띄워야 하고, 폴더와 파일들을 탐색하기 위해서 필히 마우스를 사용해야 한다.
리눅스에도 이런 gui 기반 파일 관리자들이 있다. 대표적으로 Dolphin, Thunar, Pcmanfm를 예로 들 수 있다.
그러나 리눅스 생활을 오래하면, 우리는 이런 GUI 파일 매니저가 점점 싫어지게 된다.
필자만 그런걸지도?
파일 관리조차 터미널에서 하면 얼마나 좋을까? 하는 생각을 하게 된다.
CLI를 너무 좋아하게 되어서 그럴 것이다.
그리고 리눅스 환경에서는 ssh을 통해 원격 접속으로 내 작업 pc에 접속하는 일이 잦은데, 여기선 GUI 기반 파일 매니저는 애초에 사용이 불가능하다.
그럼 파일 관리를 터미널에서 ls, cp, mv를 사용하여 일일이 작업들을 처리하자는 말인가? 당연히 아니다. 그 방식도 좋긴하지만, 파일 관리 작업을 하나씩 하나씩 수동으로 하는 것은 너무나 번거롭다.
이런 생각을 필자보다 먼저 했던 리눅스 너드들은, CLI에서 동작하는 파일 매니저를 만들어 두었다. 이들은 터미널과 스무스하게 통합시키면서 일일이 파일 조작 명령어들을 입력하지 않도록 해준다.
CLI 기반 파일 매니저에도 여러 종류가 있지만, 우린 그들 중 가장 최근에 개발된 rust 기반 프로그램인 yazi를 한번 찍어 먹어보도록 하자.
yazi 개요
yazi의 공식 홈페이지에 있는 설명서를 같이 읽어보자.
yazi는 여러 dependencies들에 기반하여 동작하며 이들 중 필요한 것만 선택하여 설치할 수 있다고 한다. 특히 이들 optional dependencies들은 미리보기, 압축 해제, fzf와 같은 뛰어난 기능을 제공하는데 사용되니, 가능하면 모두 설치하는 것이 좋다.
To use Yazi, you must have the following prerequisites installed:
- file (for file type detection)
Yazi can be optionally extended with other command-line tools to enable additional features.
- nerd-fonts (recommended)
- ffmpeg (for video thumbnails)
- 7-Zip (for archive extraction and preview, requires non-standalone version)
- jq (for JSON preview)
- poppler (for PDF preview)
- fd (for file searching)
- rg (for file content searching)
- fzf (for quick file subtree navigation, >= 0.53.0)
- zoxide (for historical directories navigation, requires fzf)
- resvg (for SVG preview)
- ImageMagick (for Font, HEIC, and JPEG XL preview, >= 7.1.1)
- xclip / wl-clipboard / xsel (for Linux clipboard support)
Upgrade these dependencies to their newest version if certain functionality is not working as expected.
그럼 설치를 진행해보자.
yazi 설치하기
설치는 각자 사용하는 배포판에 따라 설치해주자. arch를 사용한다면 다음의 명령어를 실행하면 된다.
sudo pacman -S yazi ffmpeg 7zip jq poppler fd ripgrep fzf zoxide resvg imagemagickyazi 사용하기
설치가 완료되었으면, yazi를 한번 실행시켜보자.
앞서 언급한 바와 같이, yazi는 CLI 프로그램이다.
그러니 터미널을 열고 yazi를 입력해준다.
yazi그럼 다음같은 아름다운 파일 매니저가 열리게 된다.
yazi
기본 config 파일들 가져오기
default config 파일들은 여기서 다운받을 수 있다.
이들을 받아서 $HOME/.config/yazi/에 저장해주면 된다.
다운받은 후 파일 이름에서 default를 떼고, 각각 다음의 이름으로 바꿔주자.
- keymap.toml
- theme.toml
- yazi.toml
기본 키 바인딩 익히기
yazi에서 이뤄지는 모든 작업들은 사실 터미널 명령어들을 단축키로 지정해두고, 단축키에 맞춰 이들을 실행해주는 방식으로 이뤄진다.
Default 키 바인딩은 $HOME/.config/yazi/keymap.toml에 설정되어 있다.
한번 열어보자.
keymap = [
{ on = "<Esc>", run = "escape", desc = "Exit visual mode, clear selection, or cancel search" },
{ on = "<C-[>", run = "escape", desc = "Exit visual mode, clear selection, or cancel search" },
{ on = "q", run = "quit", desc = "Quit the process" },
{ on = "Q", run = "quit --no-cwd-file", desc = "Quit without outputting cwd-file" },
{ on = "<C-c>", run = "close", desc = "Close the current tab, or quit if it's last" },
{ on = "<C-z>", run = "suspend", desc = "Suspend the process" },
# Hopping
{ on = "k", run = "arrow prev", desc = "Previous file" },
{ on = "j", run = "arrow next", desc = "Next file" },
{ on = "<Up>", run = "arrow prev", desc = "Previous file" },
{ on = "<Down>", run = "arrow next", desc = "Next file" },
{ on = "<C-u>", run = "arrow -50%", desc = "Move cursor up half page" },
{ on = "<C-d>", run = "arrow 50%", desc = "Move cursor down half page" },
{ on = "<C-b>", run = "arrow -100%", desc = "Move cursor up one page" },
{ on = "<C-f>", run = "arrow 100%", desc = "Move cursor down one page" },
{ on = "<S-PageUp>", run = "arrow -50%", desc = "Move cursor up half page" },
{ on = "<S-PageDown>", run = "arrow 50%", desc = "Move cursor down half page" },
{ on = "<PageUp>", run = "arrow -100%", desc = "Move cursor up one page" },
{ on = "<PageDown>", run = "arrow 100%", desc = "Move cursor down one page" },
{ on = [ "g", "g" ], run = "arrow top", desc = "Go to top" },
{ on = "G", run = "arrow bot", desc = "Go to bottom" },
# Navigation
{ on = "h", run = "leave", desc = "Back to the parent directory" },
{ on = "l", run = "enter", desc = "Enter the child directory" },
{ on = "<Left>", run = "leave", desc = "Back to the parent directory" },
{ on = "<Right>", run = "enter", desc = "Enter the child directory" },
{ on = "H", run = "back", desc = "Back to previous directory" },
{ on = "L", run = "forward", desc = "Forward to next directory" },
# Toggle
{ on = "<Space>", run = [ "toggle", "arrow next" ], desc = "Toggle the current selection state" },
{ on = "<C-a>", run = "toggle_all --state=on", desc = "Select all files" },
{ on = "<C-r>", run = "toggle_all", desc = "Invert selection of all files" },
# Visual mode
{ on = "v", run = "visual_mode", desc = "Enter visual mode (selection mode)" },
{ on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
# Seeking
{ on = "K", run = "seek -5", desc = "Seek up 5 units in the preview" },
{ on = "J", run = "seek 5", desc = "Seek down 5 units in the preview" },
# Spotting
{ on = "<Tab>", run = "spot", desc = "Spot hovered file" },
...자세히 보면, 많은 단축키가 vim 키를 기준으로 작성되어 있다. (리눅스에서 vim을 피할 수 있을까?)
그리고 항목들을 유심히 보다보면 C-u처럼 표현된 것들이 있는데, 이건 Control과 u를 같이 누른다는 의미이다.
유사하게 S-PageUp은 Shift와 PageUp을 같이 누른다는 의미이다.
그리고 ,로 키들이 구분된 것은 순차적으로 누르란 의미이다.
우리는 이 기본 설정을 참고하여 각 기능에 익숙해지거나, 혹은 입맛대로 고쳐주면서 사용하면 된다. 나는 default에서 아주 일부만 고쳐서 사용하고 있다.
팁을 주자면, 다음의 순서로 기능들에 익숙해지면 좋을 것 같다.
- 항목들의 위 아래로 이동하는 방법
- 하부 혹은 상부 폴더로 이동하는 방법
- 특정 파일을 open하는 방법
- 여러 파일을 선택하는 방법
- 파일을 잘라내서 이동하는 방법과 복사하는 방법
- 임의의 경로를 입력해서 이동하는 방법
- cli 명령어를 실행하는 방법
이 정도 기능 중심으로 익혀나가다보면, 생각보다 굉장히 편리하단 것을 알게될 것이다.
각종 파일 미리보기 기능
앞서 yazi를 설치할 때 모든 dependencies를 함께 설치했다면, 그리고 필자처럼 native로 이미지 preview를 지원하는 터미널(e.g. kitty)을 사용한다면 각 파일의 확장자에 맞는 미리보기가 가장 오른쪽 pane에 보일 것이다.
예를들면, pdf, txt, 이미지 파일들은 다음처럼 미리보기가 표시된다.
이 미리보기 기능이 진짜 좋다. 왜냐면, ssh로 원격 접속한 pc의 yazi에서도 이미지를 직접 확인할 수 있기 때문이다! 이건 원격 터미널로 작업도 하고, 출력물들 (이미지나 pdf 등)도 곧바로 원격 터미널에서 확인할 수 있단 말이다.
마무리하며
오늘은 터미널에서 사용할 수 있는 파일 매니저 yazi를 설치하고 기본 설정하는 법, 그리고 기본 사용법을 알아보았다.
굉장히 유용한 툴이니 꼭 익혀서 사용해보자!