elsa in mac

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

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 들은 여기를 참조하시기 바랍니다. 

PDF 프리뷰의 경우, PDF의 첫장이 보이면, 마우스 포인트를 옮기고 scroll up/down을 이용하여 전체 페이지를 볼 수 있습니다. 

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