eza + zoxide + bat:用现代命令行工具替换 ls/cd/cat

每天在终端里敲得最多的三个命令,大概就是 lscdcat。它们能用,但体验停留在几十年前:ls 没有颜色也没有图标,cd 一长串路径要手敲,cat 把代码糊成一团没有高亮。现代命令行工具用 Rust 重写这三件套——eza 替 ls、zoxide 替 cd、bat 替 cat——几行配置就能让终端效率翻倍。本文手把手教你装好、配好、用顺。

一、为什么换掉 ls/cd/cat

传统 Unix 命令设计于带宽按字符计费、终端只显示单色的年代,今天看就显出三个硬伤:ls 默认无色无图标,目录文件分不清;cd 不支持模糊跳转,深层路径全靠手敲或疯狂按 Tab;cat 纯文本输出,读代码、看 diff 都费眼。这三个命令你每天要敲几百次,体验每提升一点,积累下来就是实打实的效率。而 eza / zoxide / bat 都是单文件二进制、零运行时依赖,装上即用,风险极低。

更要命的是,这些命令之间毫无联动:你 cd 进一个目录,ls 不会帮你高亮重点,cat 也不会提示哪行刚改过。现代终端讲究”信息密度 + 即时反馈”,而老三样把这两点都丢了。下面三个工具各自只解决一件事,但组合起来正好补齐这块短板,而且彼此不冲突,可以一次全装。

二、eza:会发光的 ls

eza 是 ls 的现代化替代品,用 Rust 写成,默认就带颜色、文件类型图标(需 Nerd Font 或终端支持)、Git 状态标记,还能一条命令画出目录树。装完第一件事就是体验它的彩色输出。

# macOS / Linux (Homebrew)
brew install eza

# 基础:彩色 + 图标 + Git 状态 + 长格式
eza --icons --git -l

# 目录树(只看两层)
eza --tree --level=2

# 显示隐藏文件 + 按修改时间排序
eza -la --sort=modified

注意 --icons 在支持图标字体的终端(如 iTerm2 + Nerd Font)下效果最好;终端不支持时改用 --icons=auto,它会自动判断并降级,不会出现方框乱码。配合 --git,修改过的文件还会直接标出 Git 状态,比原版 ls 直观太多。

三、zoxide:记住你去过哪的 cd

cd ~/code/project-a/src/main 这种长路径,每次手敲都很烦。zoxide 的思路是”学习你的习惯”:你 cd 过的目录它会记下来,之后只要 z proj 就能模糊跳过去,越常用的目录越好跳。它用 frecency(频率 + 新鲜度)排序,而不是简单字符串匹配。相比老牌的 autojump / z.sh,zoxide 用 Rust 实现、跨平台一致、还能和 fzf 联动做交互选择。

# 安装
brew install zoxide

# 把初始化脚本挂进 Shell(关键一步,否则 z 命令不存在)
# Bash
echo 'eval "$(zoxide init bash)"' >> ~/.bashrc
# Zsh
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc

# 之后就可以这样跳
z dotfiles        # 跳到常去的 dotfiles 目录
z pro             # 模糊匹配 project 之类
zi                # 交互式列出候选目录再选
zoxide query -l   # 看看它都记住了哪些目录

zoxide 的数据库是从你的 cd 历史自动建立的,挂上 init 后正常用 cd 即可,无需额外操作。老机器想导入历史,可以 zoxide import /path/to/history/file 一次性灌进去;想清掉某条误记的路径,用 zoxide remove <path> 即可。另外 zoxide add <path> 能手动把某个目录提到最高优先级,适合把常用但少去的目录(如 ~/Downloads、项目根)固定下来,z 一敲就到,不必等它”学习”出来。

四、bat:带语法高亮的 cat

cat 最大的问题是”把代码当纯文本糊出来”。bat 默认就做语法高亮、行号、Git 改动标记(改过的行打 +/-),还能自动分页。看日志、读源码、审 diff 都更舒服。

# 安装
brew install bat

# 看单文件(高亮 + 行号)
bat src/main.rs

# 不想要行号和装饰,纯内容
bat -p README.md

# 换主题(需先确认主题名,见下方避坑)
export BAT_THEME="Catppuccin Mocha"

# 接进 Git:让 git diff / show 也用 bat 的高亮
git config --global core.pager "bat --paging=never --style=plain"

在 Debian/Ubuntu 上,这个包的名字叫 batcat(因为和系统里一个同名工具冲突),安装后命令是 batcat,需要在别名里把它指回 bat,这是最常见的”装了却敲 bat 找不到”的原因。主题名可通过 bat --list-themes 查看,复制全名再设 BAT_THEME

五、三件套 vs 传统命令

传统命令现代替代多了什么
lseza图标 / 颜色 / Git 状态 / 目录树
cdzoxide模糊跳转、frecency 智能排序
catbat语法高亮、行号、Git 改动标记

六、一键接入 Shell:别名与集成

工具装好只是第一步,真正好用是把它们”伪装”成原命令。在 ~/.bashrc~/.zshrc 末尾加上别名,以后敲 lscat 实际跑的就是新版,存量习惯零改造。

# ~/.zshrc 或 ~/.bashrc 末尾
alias ls='eza --icons=auto'
alias ll='eza --icons=auto -l'
alias lt='eza --tree --level=2'
alias cat='bat -p'

# 重新加载生效
exec "$SHELL"

如果你已经在用 tmux 做终端会话管理(可参考我们的 tmux 终端复用实战),这三件套配合起来尤其顺:一个快捷键进对应项目目录、一个 lt 看清结构、一个 bat 翻代码,全程不用离开键盘。它们和 fzf 也能联动——zoxide 的 zi 背后就是调用 fzf 做交互筛选。

七、把它们接进 Git 工作流

三件套和 Git 是天作之合。除了前面 bat 当 pager,eza 也能当 git status 的可视化外壳,zoxide 直接 z 跳到仓库根。日常看改动时,用 bat 让 diff 带高亮,比原生 cat 友好太多。

# 用 eza 的 git 视图快速看仓库文件状态
eza --git -l

# 让 git log / diff 走 bat 高亮(已在上文 pager 设置)
git show HEAD --stat

# 复杂 rebase 时,配合 bat 高亮逐提交审查改动
git rebase -i HEAD~3

关于 rebase 时怎么安全地逐提交处理、避免把历史搞乱,我们另一篇 Git rebase 与 cherry-pick 实战踩坑 讲得更细,建议和本文一起看。配合 lazygit 终端可视化 Git,整个提交、审阅、翻历史的工作流都能在终端里丝滑完成。

八、避坑与最佳实践

1. 图标乱码先查字体。eza 的 --icons 依赖 Nerd Font;出现方框就换 --icons=auto 或装字体,不要强行开。

2. Debian/Ubuntu 的 bat 叫 batcat。安装后命令是 batcat,记得 alias bat='batcat',否则永远提示 command not found。

3. zoxide 要先 init 才生效。只装不挂 init,z 命令不存在。挂完重新打开终端或 exec "$SHELL"

4. 别名别覆盖到脚本。cat 别名成 bat -p 后,某些依赖 cat 原行为的脚本可能异常;遇到就用 \cat 调原版,或只在交互 Shell 生效。

5. 别贪多一次换完。建议先上 eza 和 bat(几乎无学习成本),zoxide 的跳转习惯养一两天再切,过渡更平滑。

6. 服务器上同样适用。这三件套在远程开发机、WSL、容器里一样能装,配合 tmux 远程会话,本地和服务器用同一套别名配置(用 dotfiles 同步),切换环境零认知负担。注意生产容器多为精简镜像,需先装字体才能让 eza 图标正常显示。

九、总结

eza、zoxide、bat 不是花架子,而是把每天敲几百次的 ls/cd/cat 体验拉到现代水平:eza 让目录一目了然,zoxide 让跳转张口就来,bat 让读码不再眼花。它们都小、快、零依赖(单二进制),装上别名一配,终端效率立竿见影。如果你还在忍受纯文本 cat 和手敲长路径,今天就把这三件套装上——更多终端效率工具可看我们整理的 命令行效率工具清单,以及 lazygit 终端可视化 Git 实操

上一篇 Function Calling 工具调用实战指南
下一篇 WASI 实战:把 WebAssembly 带进服务器与边缘