我最早知道的这类工具是Linux上的 Ranger,后来找到一个能在Windows上用的 lf,最近才知道的Yazi ,感觉好多工具/功能都被用 Rustgolang 重新实现了一遍。

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 中:

  1. 安装 Git for Windows。
  2. 添加路径到环境变量:

    • 安装器: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 有三个配置文件:

您可以在 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阶段)

还没去研究


Kenis
1 声望0 粉丝

独立开发者,瞎折腾软硬件,全栈开发,全平台自动化,CV大法。木工,胶佬。。。