我最早知道的这类工具是Linux上的
Ranger
,后来找到一个能在Windows上用的lf
,最近才知道的Yazi
,感觉好多工具/功能都被用Rust
和golang
重新实现了一遍。Yazi(意为“鸭子”)是用 Rust 编写的终端文件管理器,基于非阻塞异步 I/O。它旨在提供高效、用户友好且可自定义的文件管理体验。
💡 一篇解释其内部运作的新文章:为什么 Yazi 很快?
- 🚀 完全异步支持:所有 I/O 操作都是异步的,CPU 任务分布在多个线程中,从而充分利用可用资源。
- 💪 强大的异步任务调度和管理:提供实时进度更新、任务取消和内部任务优先级分配。
- 🖼️ 内置支持多种图像协议:还集成了 Überzug++ 和 Chafa,几乎覆盖了所有终端。
- 🌟 内置代码高亮和图片解码:结合预加载机制,大大加快图片和普通文件的加载速度。
- 🔌 并发插件系统:UI 插件(重写大部分 UI)、功能插件、自定义预览器/预加载器/提取器;只是一些 Lua 的碎片。
- 📡 数据分发服务:基于客户端-服务器架构构建(无需额外的服务器进程),集成基于 Lua 的发布-订阅模型,实现跨实例通信和状态持久化。
- 📦 包管理器:使用一个命令安装插件和主题,使它们保持最新状态,或将它们固定到特定版本。
- 🧰 与 ripgrep、fd、fzf、zoxide 集成
- 💫 类似 Vim 的 input/select/confirm/which/notify 组件,cd 路径自动补全
- 🏷️ 多选项卡支持、跨目录选择、可滚动预览(用于视频、PDF、档案、目录、代码等)
- 🔄 批量重命名、可视模式、文件选择器
- 🎨 主题系统, 鼠标支持, 垃圾桶, 自定义布局, CSI u
安装
依赖介绍
要使用 Yazi,您必须安装以下先决条件:
file
(用于文件类型检测)
Yazi 可以选择使用其他命令行工具进行扩展,以启用其他功能。
nerd-fonts
(字体图标)ffmpegthumbnailer
(用于视频缩略图)7-Zip
(用于存档提取和预览)jq
(用于 JSON 预览版)poppler
(用于 PDF 预览)fd
(用于文件搜索)rg
(用于文件内容搜索)fzf
(用于快速文件子树导航)zoxide
(用于历史目录导航)ImageMagick
(用于 SVG、字体、HEIC 和 JPEG XL 预览)xclip
/wl-clipboard
/xsel
(用于系统剪贴板支持)
如果功能无法正常工作,请尝试将其升级到最新版本。
Arch Linux
使用以下命令安装 Yazi 及其依赖:
sudo pacman -S yazi ffmpegthumbnailer p7zip jq poppler fd ripgrep fzf zoxide imagemagick
若要安装最新的 Git 版本,可以从 AUR 安装:
paru -S yazi-git ffmpegthumbnailer p7zip jq poppler fd ripgrep fzf zoxide imagemagick
也可以安装官方的夜间发布版本:
paru -S yazi-nightly-bin ffmpegthumbnailer p7zip jq poppler fd ripgrep fzf zoxide imagemagick
macOS
确保 Homebrew 已更新:
brew update
然后安装 Yazi 及其可选依赖:
brew install yazi ffmpegthumbnailer sevenzip jq poppler fd ripgrep fzf zoxide imagemagick font-symbols-only-nerd-font
如果希望使用最新代码,可以加上 --HEAD
参数:
brew install yazi --HEAD
Windows
Yazi 依赖 file(1)
来检测文件 MIME 类型。建议安装 Git for Windows,并将 file.exe
添加到环境变量 YAZI_FILE_ONE
中:
- 安装 Git for Windows。
添加路径到环境变量:
- 安装器:
C:\\Program Files\\Git\\usr\\bin\\file.exe
- Scoop:
C:\\Users\\<Username>\\scoop\\apps\\git\\current\\usr\\bin\\file.exe
- 安装器:
推荐通过以下方式安装 Yazi 和可选依赖:
scoop install yazi
scoop install 7zip jq poppler fd ripgrep fzf zoxide imagemagick
或使用 WinGet:
winget install sxyaxi.yazi
winget install 7zip.7zip jqlang.jq sharkdp.fd BurntSushi.ripgrep.MSVC junegunn.fzf ajeetdsouza.zoxide ImageMagick.ImageMagick
使用 X-CMD 安装
X-CMD 是开源轻量级 POSIX 脚本,用于管理工具 (500+) 和提供经典命令扩展
x env use yazi fzf 7za jq fd rg zoxide
快速入门
安装 Yazi 后,使用以下命令启动程序:
yazi
- 按下
q
可退出 - 按下
~
打开帮助菜单(快捷键菜单),所有的按键绑定也可以查看默认的keymap.toml
文件。
Shell 包装器
建议使用这个 y
shell 包装器,它提供了在退出 Yazi 时更改当前工作目录的能力。跟之前使用Ranger时配置退出时自动更改到退出时的工作目录一样
Linux/macOS:需要使用 $EDITOR
指定 yazi 调用的文本编辑器。我这里使用Micro作为调用的文本编辑器
Windows:没有 $EDITOR
的概念,用户需要根据需要修改文本打开器。
Bash / Zsh
function y() { local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" EDITOR=micro yazi "$@" --cwd-file="$tmp" if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then builtin cd -- "$cwd" fi rm -f -- "$tmp" }
Fish
function y set tmp (mktemp -t "yazi-cwd.XXXXXX") EDITOR=micro yazi $argv --cwd-file="$tmp" if set cwd (command cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] builtin cd -- "$cwd" end rm -f -- "$tmp" end
PowerShell
function y { $tmp = [System.IO.Path]::GetTempFileName() yazi $args --cwd-file="$tmp" $cwd = Get-Content -Path $tmp if (-not [String]::IsNullOrEmpty($cwd) -and $cwd -ne $PWD.Path) { Set-Location -LiteralPath $cwd } Remove-Item -Path $tmp }
配置
Yazi 有三个配置文件:
yazi.toml
- 常规配置。keymap.toml
- 键绑定配置。theme.toml
- 配色方案配置。
您可以在 shipped
标记 https://github.com/sxyazi/yazi/tree/ shipped/yazi-config/preset) 上找到默认配置文件。
要覆盖任何默认值,请先创建相应的文件:
~/.config/yazi/
在类 Unix 系统上。C:\Users\USERNAME\AppData\Roaming\yazi\config\
在 Windows 上。
例如,要更改隐藏文件的可见状态,请首先创建一个 yazi.toml
文件,以便:
~/.config/yazi/yazi.toml
在类 Unix 系统上。C:\Users\USERNAME\AppData\Roaming\yazi\config\yazi.toml
在 Windows 上。
然后将所需的部分复制到其中,这是show_hidden
:
# yazi.toml
[manager]
show_hidden = true
包管理工具
这个包管理工具可用于安装主题和插件,可以将自己的配置和主题插件什么的做成yazi包以供快速安装,不过目前阶段(2024-10-12)感觉用不到,对于我个人来说安装好就已经足够开箱即用了,我就设置了默认显示隐藏文件
和退出自动cd到退出时的目录
可以使用 ya pack
子命令管理您的插件和风格。例如,要从 https://github.com/owner/my-plugin.yazi 安装插件,请运行:
ya pack -a owner/my-plugin
ya pack
还支持将 monorepo 中的子目录作为包安装。例如,要从 https://github.com/yazi-rs/plugins/tree/main/git.yazi 安装包,请运行:
ya pack -a yazi-rs/plugins:git
它会自动从 GitHub 克隆它们,将它们复制到你的 plugins 目录,并更新 package.toml
以锁定它们的版本:
# ~/.config/yazi/package.toml
[plugin]
deps = [
{ use = "owner/my-plugin", rev = "0573024" },
{ use = "yazi-rs/plugins:git", rev = "9a1129c" }
]
要列出 ya pack
管理的所有插件:
ya pack -l
要在新系统上安装 package.toml
中所有具有锁定版本的插件:
ya pack -i
要将所有插件升级到最新版本:
ya pack -u
如果你想将插件固定到特定版本,以便在运行 ya pack -u
时它不会升级,请在 rev
中的哈希值前添加 =
限定符:
[plugin]
deps = [
- { use = "owner/my-plugin", rev = "9a1129c" }
+ { use = "owner/my-plugin", rev = "=9a1129c" }
]
主题(Beta阶段)
有现成的主题仓库可以直接安装主题,也可以自行编辑 theme.toml
创建自己的主题
主题仓库:https://github.com/yazi-rs/flavors
插件(Beta阶段)
还没去研究
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。