elsa in mac

터미널 File Manager의 떠오르는 샛별 - Yazi 본문

Mac(OS X)/Terminal

터미널 File Manager의 떠오르는 샛별 - Yazi

elsa in mac 2024. 9. 6. 23:46

이번 포스트에서는 ranger 나 nnn 을 능가하는 속도와 편리함을 지원하는 Terminal 기반 File Manager인 Yazi를 소개합니다. 

Yazi는 어원이 중국어로 상상속의 동물, 즉 신수를 의미합니다. 용의 머리에 악어의 몸통을 갖고 있는 동물로 오리와 관련이 있는 것은 중국어의 발음이 유사하기 때문인 것 같습니다. 

yazi는 Rust로 작성된 terminal 기반의 File Manager로 non-blocking async I/O 기술을 기반으로 합니다. 기본적으로 multi-thread pre-caching 기술을 이용하기 때문에, Yazi 내부에서 파일 유형에 따른 preview 성능이 월등히 뛰어납니다.  여러가지 기능들이 자체적인 기능에 더 해, 이미 검증되고 많이 익숙한 CLI 도구들과 연계되어 사용되기 때문에 기존 도구에 익숙한 사용자들이 매우 쉽게 배우고 사용할 수 있습니다. 

아래의 영상은 wezterm 에서 ranger와 Yazi의 4K 이미지 preview 성능을 비교 한 것입니다. 

wezterm 터미널에서 yazi(위) 와 ranger (아래) 의 성능 비교

위의 스샷 영상을 보면, wezterm 에서 yazi와 ranger의 preview 성능을 비교할 수 있습니다.  기본적으로 PDF의 경우 yazi는 PDF 첫 페이지를 이미지로 보여주지만, ranger는 text를 추출하여 text 파일로 표시홥니다. 이 경우 yazi가 좀 더 직관적입니다. 이미지 파일의 경우 4K 해상도로 꽤나 용량이 큰 편인데, Yazi 의 경우에는 pre-caching 기능을 사용하기 때문에 매우 빠르게 반응 하는 것을 확인할 수 있습니다. 반면, ranger의 경우에는 해당 파일이 선택되었을 때, 로딩을 하기 때문에 상대적으로 답답한 반응을 보여 줍니다.(이래서는 사실 프리뷰 기능이 무용지물 수준..) preview의 크기를 좀 더 작게 할 경우에는 훨씬 더 빠르게 사용할 수 있습니다. 

Yazi의 경우, kitty, sixel, uberzug 이미지 프로토콜을 모두 지원하기 때문에, kitty, Konsole, iTerm2, Wezterm, foot, VSCode, 등 매우 많은 터미널 에뮬레이터들에서 image/pdf/video preview 기능을 사용할 수 있습니다. 

yazi는 여러 다양한 CLI와 연동하여 다양한 기능을 사용할 수 있습니다. 전반적인 지원 기능을 원활히 사용하려면 다음과 같은 CLI도구들을 설치해야 합니다. 

file
eza
zoxide
poppler , (fedora의 경우 poppler-utils 추가)
fzf
fd
rg (ripgrep)
chafa
jq
7-zip
ImageMagick

zoxide와 의 연동은 디렉토리 간 이동을 매우 빠르고 편리하게 이용할 수 있도록 해 줍니다.  z 키를 누르면 입력창이 뜨고, 이동할 디렉토리 명을 키인하면, 통계적으로 가장 빈번하게 이용한 디렉토리 목록을 보여주기 때문에 신속하게 이동할 수 있습니다. 

관련된 dependency를 확인하려면, yazi --debug를 사용하면 확인할 수 있습니다. 

❯ yy --debug

Yazi
    Version: 0.3.3 (fc0d88e 2024-09-06)
    Debug  : false
    OS     : linux-aarch64 (unix)

Ya
    Version: 0.3.3 (fc0d88e 2024-09-06)

Emulator
    Emulator.via_env: ("xterm-256color", "WezTerm")
    Emulator.via_csi: Ok(WezTerm)
    Emulator.detect : WezTerm

Adapter
    Adapter.matches: Iterm2

Desktop
    XDG_SESSION_TYPE           : Some("wayland")
    WAYLAND_DISPLAY            : Some("wayland-1")
    DISPLAY                    : None
    SWAYSOCK                   : None
    HYPRLAND_INSTANCE_SIGNATURE: Some("727f1b54cd1ba48774092a5d54acc0e55f3ffe0f_1725624919_42305664")
    WAYFIRE_SOCKET             : None

SSH
    shared.in_ssh_connection: false

WSL
    WSL: false

Variables
    SHELL              : Some("/usr/bin/zsh")
    EDITOR             : Some("nvim")
    VISUAL             : None
    YAZI_FILE_ONE      : None
    YAZI_CONFIG_HOME   : None

Text Opener
    default: Some(Opener { run: "${EDITOR:-vi} \"$@\"", block: true, orphan: false, desc: "$EDITOR", for_: None, spread: true })
    block  : Some(Opener { run: "${EDITOR:-vi} \"$@\"", block: true, orphan: false, desc: "$EDITOR", for_: None, spread: true })

Multiplexers
    TMUX               : false
    tmux version       : 3.5
    ZELLIJ_SESSION_NAME: None
    Zellij version     : No such file or directory (os error 2)

Dependencies
    file             : 5.45
    ueberzugpp       : No such file or directory (os error 2)
    ffmpegthumbnailer: 2.2.2
    magick           : 7.1.1-33
    fzf              : 0.54.3
    fd               : 10.1.0
    rg               : 14.1.0
    chafa            : 1.10.3
    zoxide           : 0.9.4
    7z               : No such file or directory (os error 2)
    7zz              : 24.08
    jq               : 1.7.1

--------------------------------------------------
When reporting a bug, please also upload the `yazi.log` log file - only upload the most recent content by time.
You can find it in the "/home/elsa/.local/state/yazi" directory.

Yazi 는 themeplugin 기능을 갖고 있기 때문에, Custom UI 및 기능확장성이 유연합니다. 

설치 방법

설치는 사용하는 OS(window, linux, mac)와 distro에 따라 다양합니다. 
필자의 경우, fedora-asahi limix를 사용하고 있기 때문에, "build from source" 방법을 사욜했습니다. 

> git clone https://github.com/sxyazi/yazi.git
> cd yazi
> cargo build --release --locked
> cd target/release
> sudo cp -Rf yazi /usr/local/bin 
> sudo cp -Rf ya /usr/local/bin
Configuration

설정은, 지정된 설정파일을 통해 수정할 수 있는데, yazi.toml, keymap.toml, theme.toml 이렇게 3개의 파일로 구성됩니다. 해당 파일들은 Linux의 경우에는 ~/.config/yazi 폴더 내에 위치해야 하며,  기본 설정 파일은 여기서 다운로드를 받거나 참조하면 됩니다.   기본 binding key 들은 여기를 참조하시기 바랍니다. 

bash나 zsh를 사용하는 사용자라면, ~/.zshrc 나 ~/.bashrc 의 맨 마지막에 아래의 코드를 붙여 넣은 후, 저장하고, source ~/.zshrc 나 source ~/.bashrc 를 해 줍니다. 

function y() {
	local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
	yazi "$@" --cwd-file="$tmp"
	if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
		builtin cd -- "$cwd"
	fi
	rm -f -- "$tmp"
}

터미널 프롬프트에서 yazi 대신 y로 yazi를 실행한 후, 특정 directory에서 q 버튼을 눌러 yazi를 나가게 되면, 해당 디렉토리로 나갈 수 있습니다. 

 

 

공유하기 링크
Comments