Yazi: 用 Rust 打造的超快速終端檔案管理器 | Allen 知識庫 | Allen 知識庫
title: "Yazi: 用 Rust 打造的超快速終端檔案管理器"
author: "sxyazi"
date: 2026-02-28
source: "https://github.com/sxyazi/yazi"
views: null
github_stars: 33300
category:
- 開源工具
- 終端工具
- Rust
- 檔案管理
tags:
- Yazi
- Rust
- 終端機
- 檔案管理器
- 非同步IO
- TUI
- 開源
status: published
Yazi: 用 Rust 打造的超快速終端檔案管理器
專案: Yazi
GitHub: sxyazi/yazi
Stars: ⭐ 33.3K
語言: Rust
License: MIT
發布日期: 2026-02-28
💡 什麼是 Yazi?
名稱由來
Yazi(意思是「鴨子」🦆)是一個用 Rust 編寫的終端檔案管理器,基於非阻塞異步 I/O。
目標
提供高效、用戶友好、可自訂的檔案管理體驗。
🚀 核心特性
1. ⚡ 完全異步支援
💡 新文章:Why is Yazi Fast?
技術實現:
- ✅ 所有 I/O 操作都是異步的
- ✅ CPU 任務分散到多個執行緒
- ✅ 最大化資源利用
結果:
- 🚀 極快的檔案操作
- 🔥 充分利用多核心 CPU
- ⚡ 無阻塞的使用者體驗
2. 💪 強大的異步任務調度與管理
功能:
- 📊 即時進度更新
- ❌ 任務取消
- 🎯 內部任務優先級分配
價值:
- 長時間操作(大檔案複製)不阻塞 UI
- 用戶可隨時取消操作
- 重要任務優先執行
3. 🖼️ 內建多種圖片協議支援
| 終端機 | 協議 | 支援 |
|---|
| kitty | Kitty unicode placeholders | ✅ 內建 |
| iTerm2 | Inline images protocol | ✅ 內建 |
| WezTerm | Inline images protocol | ✅ 內建 |
| Konsole | Kitty old protocol | ✅ 內建 |
| foot | Sixel graphics format | ✅ 內建 |
| Ghostty | Kitty unicode placeholders | ✅ 內建 |
| Windows Terminal | Sixel graphics format | ✅ 內建 |
| st (Sixel patch) | Sixel graphics format | ✅ 內建 |
| Warp | Inline images protocol | ✅ 內建 |
| Tabby | Inline images protocol | ✅ 內建 |
| VSCode | Inline images protocol | ✅ 內建 |
| Black Box | Sixel graphics format | ✅ 內建 |
| Bobcat | Inline images protocol | ✅ 內建 |
| X11 / Wayland | Window system protocol | ☑️ 需要 Überzug++ |
| Fallback | ASCII art (Unicode block) | ☑️ 需要 Chafa |
- ✅ 幾乎所有現代終端機
- ✅ 多種協議自動檢測
- ✅ 降級機制(ASCII art)
4. 🌟 內建代碼高亮與圖片解碼
- 📝 代碼高亮(語法著色)
- 🖼️ 圖片解碼(多種格式)
- ⚡ 預載機制(Pre-loading)
- 🚀 大幅加速圖片與普通檔案載入
5. 🔌 並發插件系統
A. UI 插件
B. 功能插件
C. 自訂組件
- Previewer(預覽器)
- Preloader(預載器)
- Spotter(偵測器)
- Fetcher(取得器)
- 📜 只需要一些 Lua 程式碼
- ⚡ 並發執行
- 🔧 高度可擴展
6. ☁️ 虛擬檔案系統(VFS)
- SSH/SFTP 遠端檔案
- 雲端儲存整合
- 自訂資料來源
7. 📡 資料分發服務(DDS)
- 📜 Lua 為基礎的發布-訂閱模型
- 🔄 跨實例通信
- 💾 狀態持久化
- 多個 Yazi 實例可互相通信
- 共享狀態與設定
- 協作式工作流
8. 📦 套件管理器
- 🚀 一鍵安裝插件與主題
- 🔄 保持更新
- 📌 固定特定版本
- 類似 NPM/Cargo
- 無需手動管理依賴
- 社群生態系統
9. 🧰 整合工具
10. 💫 Vim 風格組件
- ⌨️ Input(輸入)
- 🎯 Pick(選擇)
- ✅ Confirm(確認)
- ❓ Which(提示)
- 📢 Notify(通知)
- 🚀 自動補全(cd 路徑)
- ⌨️ Vim 鍵綁定
- 🎨 一致的 UI 體驗
11. 🏷️ 進階功能
- 📑 多標籤支援
- ✂️ 跨目錄選擇
- 📜 可滾動預覽(影片、PDF、壓縮檔、代碼、目錄等)
12. 🎨 使用者體驗
- 🎨 主題系統
- 🖱️ 滑鼠支援
- 🗑️ 垃圾桶(回收站)
- 📐 自訂佈局
- ⌨️ CSI u(鍵盤協議)
- 📋 OSC 52(剪貼板整合)
📊 專案狀態
當前階段
- ⚠️ Yazi 目前正在積極開發中
- ⚠️ 預期會有破壞性變更
- ✅ 但已足夠穩定供日常使用
📚 資源
官方文檔
社群
🎯 技術深度分析
1. 為什麼 Yazi 這麼快?
A. 非阻塞異步 I/O
讀取檔案 A → 等待 → 處理 → 讀取檔案 B → 等待 → 處理
讀取檔案 A | 讀取檔案 B | 讀取檔案 C
↓ ↓ ↓
處理 A 處理 B 處理 C
- ✅ 並發操作
- ✅ 充分利用 I/O
- ✅ CPU 持續工作
B. 多執行緒 CPU 任務
- 🖼️ 圖片解碼 → Thread 1
- 📝 語法高亮 → Thread 2
- 📊 檔案排序 → Thread 3
- 🎨 UI 渲染 → Main Thread
- ✅ 多核心充分利用
- ✅ 不阻塞 UI
- ✅ 響應速度快
C. 預載機制
- 👁️ 預測用戶下一步操作
- 📥 提前載入可能需要的檔案
- 🖼️ 提前解碼圖片
2. 插件系統架構
Lua 為基礎
- ✅ 輕量級(嵌入式友好)
- ✅ 快速(JIT 編譯)
- ✅ 簡單(容易學習)
- ✅ 安全(沙盒執行)
插件類型
-- 自訂狀態列
function Status:render()
-- 自訂 UI 邏輯
end
-- 添加新命令
function plugin:entry()
-- 自訂功能
end
-- 自訂預覽器
function Previewer:new(file)
-- 預覽邏輯
end
並發執行
- 🔀 插件可並發運行
- 🚫 不阻塞主執行緒
- 🎯 自動任務調度
3. 虛擬檔案系統(VFS)
抽象層
Yazi UI
↓
VFS Layer (抽象)
↓
├─ Local FS
├─ SFTP
├─ S3
└─ Custom
應用場景
yazi sftp://user@host/path
-- 實作 VFS 介面
function CustomFS:read(path)
-- 自訂讀取邏輯
end
4. 資料分發服務(DDS)
架構
Yazi Instance 1 ←→ DDS ←→ Yazi Instance 2
↕
State Storage
發布-訂閱模型
-- Instance 1 發布事件
dds:publish("file-changed", {path = "/foo"})
-- Instance 2 訂閱事件
dds:subscribe("file-changed", function(data)
-- 處理事件
end)
應用場景
- 多個 Yazi 實例同步選擇狀態
- 共享書籤
- 同步設定
💡 關鍵洞察
1. Rust + Async = 性能與安全
- ✅ 記憶體安全(無 GC)
- ✅ 並發安全(無資料競爭)
- ✅ 零成本抽象
- ✅ 豐富的生態系統
2. 插件生態系統的重要性
- ✅ 核心保持輕量
- ✅ 功能無限擴展
- ✅ 社群驅動創新
3. 終端圖片預覽的複雜性
- 🤔 終端機標準各異
- 🤔 協議不統一
- 🤔 相容性問題
- ✅ 支援多種協議
- ✅ 自動檢測最佳協議
- ✅ 降級機制(ASCII art)
- 🎯 13+ 種終端機內建支援
- 🎯 X11/Wayland 支援(via Überzug++)
- 🎯 Fallback(via Chafa)
4. 使用者體驗設計
- ✅ 鍵盤優先
- ✅ 高效操作
- ✅ 學習曲線平緩(Vim 用戶)
- ⌨️ 鍵盤用戶滿意
- 🖱️ 滑鼠用戶也能用
- 🎨 外觀不妥協
🔗 與其他檔案管理器比較
| 特性 | Yazi | ranger | lf | nnn |
|---|
| 語言 | Rust | Python | Go | C |
| 異步 I/O | ✅ | ❌ | ❌ | ❌ |
| 圖片預覽 | ✅ 13+ 協議 | ✅ 有限 | ⚠️ 基本 | ❌ |
| 插件系統 | ✅ Lua 並發 | ✅ Python | ⚠️ Shell | ❌ |
| 效能 | 🚀 極快 | ⚠️ 慢 | ✅ 快 | ✅ 快 |
| 虛擬 FS | ✅ | ❌ | ❌ | ❌ |
| 跨實例通信 | ✅ DDS | ❌ | ❌ | ❌ |
| 套件管理 | ✅ | ❌ | ❌ | ❌ |
- Yazi 是功能最全面的現代終端檔案管理器
- 效能與功能兼具
🚀 快速開始
安裝
# Arch Linux
sudo pacman -S yazi
# macOS
brew install yazi
# Cargo (跨平台)
cargo install --locked yazi-fm
# Nix
nix-shell -p yazi
基本使用
# 啟動 Yazi
yazi
# 在指定目錄啟動
yazi /path/to/directory
鍵盤快捷鍵(預設)
j/k - 上下移動
h/l - 進入/離開目錄
space - 選擇檔案
y/x/p - 複製/剪下/貼上
d - 刪除(移至垃圾桶)
r - 重命名
/ - 搜尋
q - 退出
🔖 標籤
#Yazi #Rust #終端機 #檔案管理器 #非同步IO #TUI #開源 #Vim風格 #插件系統 #虛擬檔案系統
📝 總結
- 🦆 用 Rust 編寫的超快速終端檔案管理器
- ⚡ 基於非阻塞異步 I/O
- 🔌 強大的 Lua 插件系統
- 🖼️ 完善的圖片預覽支援
- ⚡ 極快速度:異步 I/O + 多執行緒
- 🔧 高度可擴展:插件 + VFS + DDS
- 🎨 優秀體驗:Vim 風格 + 現代 UI
- 🌐 豐富生態:社群插件 + 主題
- ⌨️ 終端機愛好者
- 🚀 追求效能的使用者
- 🔧 需要自訂工作流的開發者
- 🖼️ 需要圖片預覽的使用者
Yazi 是下一代終端檔案管理器,結合了 Rust 的效能、現代的架構設計與優秀的使用者體驗。
GitHub Stars: ⭐ 33.3K - 廣受社群認可!
🔗 相關資源