跳至主要内容

Yazi

Overview

Yazi(意為「快」)是一款以 Rust 編寫的現代終端檔案管理器,採用非同步 I/O 架構,帶來極致的操作速度與流暢體驗。相較於傳統的 ranger、lf 等工具,Yazi 在效能、預覽能力和擴展性方面都有顯著的提升。

主要特色:

  • 極速效能 — Rust 實作搭配 async I/O,檔案列表載入與操作幾乎無延遲
  • 完整檔案預覽 — 支援圖片、程式碼語法高亮、壓縮檔、PDF 等多種格式
  • 現代終端整合 — 原生支援 Ghostty、Kitty、iTerm2 等終端的圖片協議
  • 高度可自訂 — TOML 配置檔,支援插件擴展
  • Vi 風格操作 — 熟悉的鍵位映射,學習成本低

Install

macOS (Homebrew)

brew install yazi ffmpegthumbnailer poppler fd ripgrep fzf zoxide imagemagick

Linux

# Arch Linux
pacman -S yazi ffmpegthumbnailer poppler fd ripgrep fzf zoxide

# Ubuntu/Debian (via cargo)
cargo install --locked yazi-fm yazi-cli

驗證安裝

yazi --version

Config

Yazi 的配置檔案位於 ~/.config/yazi/,採用 TOML 格式:

~/.config/yazi/
├── yazi.toml # 主要配置(功能開關、排序、預覽設定)
├── keymap.toml # 鍵位映射
├── theme.toml # 主題和顏色配置
└── init.lua # Lua 初始化腳本(插件載入)

yazi.toml 基本設定

[manager]
sort_by = "natural"
sort_dir_first = true
show_hidden = false
show_symlink = true

[preview]
max_width = 1000
max_height = 1000
image_filter = "triangle"

[opener]
edit = [
{ run = '${EDITOR} "$@"', block = true, for = "unix" },
]

Keybindings

Yazi 採用 Vi 風格鍵位,常用操作:

按鍵功能
h / l上層目錄 / 進入目錄或開啟檔案
j / k下移 / 上移
H / L後退 / 前進(歷史記錄)
<Space>選取 / 取消選取
d刪除(移至垃圾桶)
D永久刪除
r重新命名
c複製(yank)
x剪下
p貼上
/篩選(filter)
s搜尋(整合 fd/rg)
z跳轉(整合 zoxide)
.顯示 / 隱藏隱藏檔案
q離開
~回到家目錄
t新增分頁(tab)

Shell Integration (cd on exit)

預設情況下,Yazi 在子 shell 中執行,離開後不會改變工作目錄。透過 wrapper function 可以實現「離開時切換到最後瀏覽的目錄」:

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

將此函式加入 .zshrc.bashrc,之後使用 y 指令啟動 Yazi,離開時會自動 cd 到最後所在的目錄。

Preview Features

Yazi 的預覽系統是其最大亮點之一,支援多種檔案格式的即時預覽:

類型工具依賴說明
圖片終端原生支援Ghostty、Kitty、iTerm2 透過圖片協議直接顯示
程式碼bat語法高亮顯示,支援行號
影片ffmpegthumbnailer顯示影片縮圖
PDFpoppler渲染 PDF 頁面預覽
壓縮檔內建列出壓縮檔內容
目錄內建顯示子目錄結構
Markdownglow (選用)渲染 Markdown

整合現代 CLI 工具

Yazi 深度整合以下工具以提升搜尋與預覽體驗:

  • bat — 程式碼預覽的語法高亮
  • fd — 快速檔案搜尋(取代 find)
  • ripgrep — 檔案內容搜尋(grep 替代)
  • fzf — 模糊搜尋跳轉
  • zoxide — 智能目錄跳轉

Plugins

Yazi 支援 Lua 插件擴展功能:

# 安裝插件(使用 yazi-cli)
ya pack -a yazi-rs/plugins:full-border
ya pack -a yazi-rs/plugins:chmod

常用插件:

  • full-border — 完整邊框 UI
  • chmod — 直接修改檔案權限
  • git — 顯示 Git 狀態標記
  • starship — 整合 Starship prompt 顯示路徑資訊

插件配置在 init.lua 中載入:

-- ~/.config/yazi/init.lua
require("full-border"):setup()
require("git"):setup()

Comparison

特性Yazirangerlfnnn
語言RustPythonGoC
速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
圖片預覽原生支援需額外配置有限支援需插件
非同步 I/O部分
插件系統LuaPythonShellShell
配置格式TOMLini-like自訂環境變數
記憶體佔用極低

比較摘要

  • vs ranger — ranger 以 Python 編寫,功能豐富但啟動慢、大目錄卡頓。Yazi 提供相似的三欄式 UI,但速度快數倍。
  • vs lf — lf 以 Go 編寫,概念相近(受 ranger 啟發),但 Yazi 的預覽系統更完善,圖片支援更原生。
  • vs nnn — nnn 以 C 編寫,極度精簡快速,但功能較少、預覽能力有限,需要大量外部腳本補充。

See Also