CLI 工具箱

这类工具现在基本是常识了,但每样真正改变日常的点其实很具体,不只是"更快的 X"。逐个说说我天天用到的特性。

rg(ripgrep)替 grep — 最大的差别不是快,是默认就对⁠:它自动遵守 .gitignore/.ignore、跳过隐藏文件和二进制,所以在仓库里搜永远只命中你关心的源码,不会被 node_modulestarget/ 淹没。要连被忽略的也搜才加 -uu(再加一个 u 连二进制都搜)。常用 -t rust 按文件类型过滤、-g '*.toml' 按 glob、-A/-B/-C 给上下文、rg foo -r bar 预览替换。它快是因为 Rust 的正则走有限自动机 + 多线程 + 跳过该跳的,不是靠蛮力。

fd 替 findfd 模式 直接对文件名做 smart-case 正则,不用再背 find . -name '*.x' -type f 那套;同样默认守 gitignore(-H 带隐藏、-I 不守 ignore)。真正顺手的是 -x/-X 批量执行:fd -e jpg -x convert {} {.}.png 对每个结果并行跑、-X 则把所有结果一次性喂给一条命令。

bat 替 cat — 语法高亮只是表面,它还在行号旁显示 git 增删 gutter、自动分页(套 less)。关键是管道安全⁠:一旦检测到输出不是终端,它自动退化成纯 cat,不会把转义码灌进下游。所以拿它当 cat 别名零负担,还能当 MANPAGER(bat -l man)和 fzf 预览的渲染后端。

eza 替 lseza -l --git --icons 把每个文件的 git 状态直接标在列表里,--tree --level=2 当 tree 用还守 gitignore。我 ls 全家(ls/ll/tree)都换成了它,具体别名在 Zsh 那篇。

zoxidez 跳目录 — 它维护一张按 frecency(访问频率 × 最近程度)排序的目录表,z dow 就跳到你最常去的那个 Downloads,z foo bar 多关键词缩小匹配,zi 调出 fzf 交互选。完全从你的 cd 历史自学,不用手配任何路径。

just 当项目里的 make — 它不是构建系统⁠:没有文件依赖图、不看时间戳,就是个"项目命令别名表"。把那些记不住的长命令写成 recipe,just deployjust test --release 一句跑;支持变量、.env、给单条 recipe 指定 shebang 用别的语言写。比 Makefile 省心在没有 tab 地狱、没有 .PHONY 和隐式规则的坑。

fastfetch / tldr — 前者是更快的 neofetch,截图报家底用;后者给命令的实用示例⁠(tldr tar 直接出最常用的几条),比啃 man 的完整 flag 列表快得多,离线缓存。

这堆里 bat/eza/fzf 还兼任 Zsh 补全预览 的后端。

真正值得花几分钟配的是 git 的 diff,我用 delta:

[core]        pager = delta
[interactive] diffFilter = delta --color-only
[delta]       navigate = true        # n / N 在文件间跳
              line-numbers = true
[merge]       conflictStyle = zdiff3
[diff]        colorMoved = default

两个设置改善很明显。zdiff3 把合并冲突的标记从"两边对照"换成"三方"——多显示一段共同祖先,到底是谁动了什么一眼能判,解冲突少绕很多弯。colorMoved 给整块挪了位置的代码单独配色,review 时不会把"搬家"误读成"重写"。delta 配 lazygit 用,终端里看 diff 比网页舒服。