Yazi는 단순한 파일 탐색기가 아니다: 터미널 파일 관리와 확장 구조
Rust로 만든 터미널 파일 매니저 Yazi가 파일 선택기나 cd 보조 도구와 어떻게 다른지, 3패널 탐색·비동기 작업·미리보기·셸 연동·Lua 플러그인이 하나의 파일 관리 흐름을 어떻게 만드는지 살펴본다.
Yazi를 처음 보면 터미널 안에 파일 목록과 미리보기를 띄우는 도구 정도로 보인다. 하지만 실제 역할은 단순한 파일 선택기가 아니다. 디렉터리를 돌아다니고, 여러 파일을 선택하고, 복사·이동·삭제하고, 파일 형식에 맞는 프로그램을 실행하는 터미널 파일 매니저다.
핵심은 기능 수가 아니라 작업의 연결 방식에 있다.
1
2
3
4
5
6
파일시스템 탐색
→ 내용 미리보기
→ 여러 파일 선택
→ 복사·이동·삭제
→ 에디터나 외부 프로그램으로 열기
→ 현재 디렉터리를 셸에 넘기고 종료
이 흐름을 키보드에서 벗어나지 않고 처리하며, 부족한 부분은 Lua 플러그인과 외부 CLI 도구로 확장할 수 있다.
파일 선택기와 파일 관리자는 다르다
Yazi의 위치를 이해하려면 fzf, zoxide, 에디터의 파일 선택기(file picker)와 역할을 구분하는 편이 빠르다.
| 도구 | 잘하는 일 | 사용자가 알고 있는 것 |
|---|---|---|
fzf | 임의의 목록에서 항목 하나를 퍼지 검색으로 선택 | 찾을 이름이나 목록의 성격 |
zoxide | 방문 기록을 바탕으로 익숙한 디렉터리로 점프 | 목적지 이름의 일부 |
| Neovim 파일 선택기 | 찾은 파일이나 검색 결과를 바로 편집 | 편집할 파일이나 문자열 |
| Yazi | 파일시스템을 둘러보며 여러 파일을 관리 | 대략적인 위치나 주변 구조 |
목적지가 분명하면 z project가 Yazi보다 빠르다. 파일명을 알고 있으면 fzf나 에디터의 파일 선택기가 효율적이다. 반대로 정확한 이름은 모르지만 주변 디렉터리와 파일 내용을 보며 찾아야 하거나, 찾은 뒤 여러 파일을 옮겨야 한다면 Yazi가 자연스럽다.
따라서 Yazi는 다른 도구를 대체하기보다 탐색하면서 판단하고 관리하는 구간을 맡는다.
3패널이 탐색 문맥을 유지한다
기본 화면은 부모 폴더, 현재 폴더, 미리보기의 세 영역으로 나뉜다.
1
2
3
4
5
6
┌ 부모 폴더 ─────┬ 현재 폴더 ─────┬ 미리보기 ───────┐
│ project-a │ README.md │ # Project │
│ project-b │ src/ │ │
│ project-c │ package.json │ 현재 항목 내용 │
└────────────────┴─────────────────┴─────────────────┘
h/l j/k J/K
왼쪽 패널은 단순한 경로 문자열이 아니라 부모 폴더의 항목을 보여준다. 그래서 현재 위치가 주변 구조에서 어디인지 계속 확인할 수 있다. 가운데에서 커서를 움직이면 오른쪽 미리보기가 따라 바뀌므로, 파일을 열었다 닫는 과정을 반복하지 않아도 된다.
Vim과 비슷한 h, j, k, l 이동은 진입 장벽을 낮추지만 Yazi의 본질은 Vim 키맵이 아니다. 선택한 파일을 y로 복사 대상으로 표시하고 p로 붙여넣거나, x와 p로 이동하는 등 파일 관리 동작이 같은 화면에 이어진다는 점이 중요하다.
비동기 작업과 미리보기가 파일 관리를 바꾼다
터미널 파일 관리자는 큰 파일을 복사하거나 미리보기를 만드는 동안 화면이 멈추면 사용하기 어렵다. Yazi는 Rust와 비동기 I/O를 기반으로 파일 작업과 미리보기를 처리하고, w로 백그라운드 작업의 진행 상태와 실패를 확인할 수 있다.
미리보기 역시 텍스트 파일에만 머물지 않는다. 설치된 외부 도구에 따라 코드, 이미지, PDF, 영상, 압축 파일 등을 현재 화면에서 확인한다. 이 구조에서 fd, ripgrep, fzf, zoxide는 경쟁 제품이 아니라 Yazi가 호출하는 전문 도구가 된다.
| 기본 키 | 연결되는 역할 |
|---|---|
s | fd를 이용한 파일명 검색 |
S | ripgrep을 이용한 파일 내용 검색 |
z | fzf를 이용한 파일·디렉터리 탐색 |
Z | zoxide 방문 기록을 이용한 디렉터리 이동 |
Yazi가 모든 기능을 직접 다시 구현하기보다 검증된 CLI를 조합하는 방식이다. 각 도구를 따로 쓸 수 있고, 파일 관리 문맥 안에서도 이어 쓸 수 있다.
종료한 위치를 셸에 남기는 방법
Yazi 안에서 디렉터리를 이동해도 yazi 프로세스가 종료되면 부모 셸의 현재 디렉터리는 원래대로다. 자식 프로세스는 부모 프로세스의 작업 디렉터리를 직접 바꿀 수 없기 때문이다.
공식 셸 래퍼(shell wrapper)는 이 경계를 우회하지 않고 명시적으로 연결한다.
1
2
3
4
5
부모 셸에서 y 실행
→ wrapper가 임시 cwd-file 생성
→ yazi --cwd-file=... 실행
→ Yazi가 종료 위치 기록
→ 부모 셸의 wrapper가 파일을 읽어 cd 실행
이 래퍼를 설정한 뒤 yazi 대신 y로 실행하면 된다. q로 종료하면 현재 위치가 셸에 반영되고, Q로 종료하면 셸 위치를 유지한다. Yazi를 파일 관리자뿐 아니라 대화형 디렉터리 이동 도구로 쓰게 만드는 작은 차이다.
커스텀은 네 계층으로 나뉜다
Yazi의 설정은 한 파일에 모두 섞이지 않는다.
| 파일 | 책임 |
|---|---|
yazi.toml | 파일 관리, 정렬, opener, previewer 등 일반 동작 |
keymap.toml | 키 조합과 실행할 명령 |
theme.toml | 색상과 활성화할 Flavor |
init.lua | Lua 플러그인 초기화 |
yazi.toml, keymap.toml, theme.toml은 필요한 항목만 작성하면 기본 설정 위에 병합된다. 기본 파일 전체를 복사한 뒤 계속 동기화할 필요가 없다.
여기서 Flavor는 배포 가능한 테마 묶음이고, Plugin은 동작을 확장하는 Lua 코드다. 플러그인은 사용자 명령뿐 아니라 파일 메타데이터 수집, 내용 사전 로딩, 미리보기 렌더링 같은 파일 처리 단계에도 참여할 수 있다.
1
2
3
4
Fetcher 여러 파일의 메타데이터를 미리 수집
Spotter 선택한 파일 하나의 메타데이터를 표시
Preloader 파일 내용을 미리 준비
Previewer 준비한 내용을 미리보기 패널에 렌더링
일반 GUI 파일 관리자의 확장 기능처럼 보이지만 구현 관점에서는 에디터의 플러그인 구조와 더 가깝다. 키맵에서 플러그인 명령을 호출하고, init.lua에서 옵션을 초기화하며, 미리보기 규칙에 새 파일 형식을 연결한다. 다만 공식 문서에서 Plugin과 Flavor는 아직 Beta로 표시하므로 API 변화 가능성은 고려해야 한다.
패키지는 함께 설치되는 ya CLI로 관리한다.
1
2
3
ya pkg add yazi-rs/plugins:git
ya pkg add yazi-rs/flavors:dracula
ya pkg upgrade
설치 버전은 package.toml에 기록된다. dotfiles에 이 파일을 두면 새 환경에서 ya pkg install로 잠긴 버전을 복원할 수 있다. 실제 설정 예시와 전체 키맵은 별도 Yazi 치트시트에서 관리한다.
언제 쓰면 좋은가
Yazi가 특히 잘 맞는 상황은 분명하다.
- 정확한 파일명보다 주변 디렉터리 구조를 보며 찾을 때
- 파일을 열기 전에 이미지나 문서 내용을 빠르게 확인할 때
- 서로 다른 폴더의 여러 파일을 선택해 복사·이동할 때
- SSH나 tmux 환경에서 GUI 파일 관리자 없이 작업할 때
- 파일 형식별 opener와 previewer를 자신의 CLI 작업 흐름에 맞추고 싶을 때
반대로 파일 하나를 이름으로 바로 찾는 작업까지 모두 Yazi로 통일할 필요는 없다. 익숙한 경로는 zoxide, 목록 선택은 fzf, 검색 결과를 곧바로 편집할 때는 에디터의 파일 선택기가 더 짧다.
Yazi를 도입할 때도 처음부터 플러그인을 많이 설치하기보다 다음 순서가 안정적이다.
- 기본 키로 탐색·선택·복사·이동을 익힌다.
- 셸 래퍼로 종료 위치를 셸에 연결한다.
fd,ripgrep,fzf,zoxide중 필요한 연동을 추가한다.- 반복되는 불편이 생겼을 때만 키맵과 플러그인을 확장한다.
Yazi의 장점은 기능이 많다는 사실보다, 눈으로 탐색하는 파일 관리와 기존 CLI 도구를 하나의 흐름으로 묶는다는 점에 있다. 단순한 파일 탐색기로 시작해도 되고, 필요해지면 그 위에 자신의 터미널 작업 흐름을 점진적으로 올릴 수 있다.
참고
이 글의 명령과 기능은 Yazi 26.9.1 공식 문서를 기준으로 확인했다.