作为开发者,我们每天都生活在命令行里。我们用它来查找文件、搜索代码、请求API、管理Git。我们习惯了 find、grep、ls 和 curl,但你是否想过,这些工具的设计理念,很多已经有几十年的历史了?
它们当然很强大,但也确实……有点“反人类”。

如果你正在搭建自己的终极编程命令行工具集,那么恭喜你,这份清单将是你“质的飞跃”的起点。这些工具更快、更直观、更符合现代开发(尤其是git和JSON)的需求。
更重要的是,当你开始使用AI编程助手(如Copilot, Codeium或Gemini)时,你会发现它们特别“偏爱”这些工具。因为它们语法更简洁、输出更结构化,AI能更轻松地为你生成和解析这些命令,真正实现“强强联合”。
1. fd:闪电般的文件查找
-
替代: find
-
核心优势: 语法简洁,速度极快,默认尊重 .gitignore。
find 命令的参数多到令人发指。fd 把它变得简单了。
详细用法:
# 传统 find: find . -name "component.js"
# 现代 fd: fd component.js
# (是的,就这么简单,它会自动在当前目录递归查找)
# 查找所有 markdown 文件
# 传统: find . -name "*.md"
# 现代: fd -e md
# (fd 默认只匹配文件名,-e 代表按扩展名)
# 查找包含 "user" 的文件
fd user
# 在特定目录查找
fd user src/components
# 查找所有 node_modules 目录(find 默认会搜,fd 默认会跳过)
# -u, --unrestricted: 开启“无限制”搜索,包括隐藏文件和被忽略文件
fd -u node_modules
# 找到所有.js文件,并对每个文件执行 chmod
fd -e js -x chmod 755 {}
2. ripgrep (rg):会呼吸的代码搜索
-
替代: grep, ack, ag
-
核心优势: 快到离谱,递归搜索,默认尊重 .gitignore 和二进制文件。
ripgrep 是目前公认最快的代码内容搜索工具。
详细用法:
# 在当前目录递归搜索 "myFunction"
rg "myFunction"
# 在指定文件类型中搜索(使用 -g 或 --glob)
rg "myFunction" -g "*.js"
# 搜索不在 "test" 目录下的文件
rg "myFunction" -g "!test"
# 搜索 "error",并显示前后3行(上下文)
rg -C 3 "error"
# 搜索匹配的“文件列表”,而不是内容
rg -l "console.log"
# 统计匹配 "TODO" 的次数
rg --count "TODO"
3. ast-grep (sg):代码“语法级”搜索与重构
-
替代: 文本搜索(用于重构时)
-
核心优势: 它“看懂”代码!基于AST(抽象语法树)搜索,而非简单文本。
rg 搜索 console.log 时,可能会搜到注释里的。sg 不会,它只搜索真正的代码。这是跨代码库精准重构的神器。
详细用法:
# 假设我们要重构:把所有的 console.log(x) 替换为 logger.debug(x)
# 1. 用 ripgrep (rg) 搜索
# rg "console.log"
# (这会匹配到 console.log, console.logger, 注释中的 // console.log)
# 2. 用 ast-grep (sg) 搜索
# -p (pattern)
sg -p 'console.log($A)' --lang js
# 这会精准匹配到 console.log() 函数调用,并将参数捕获到变量 $A 中
# 3. 神奇的重构(查找并替换)
# -r (replace)
sg -p 'console.log($A)' -r 'logger.debug($A)' --lang js
# 这会把 console.log("hello") 变成 logger.debug("hello")
# 把 console.log(myVar) 变成 logger.debug(myVar)
# 彻底改变了大型重构的游戏规则!
4. jq:JSON 的“瑞士军刀”
-
替代: 复杂的 sed/awk 或手写解析脚本
-
核心优势: 简洁的语法,轻松过滤、切片、映射和转换 JSON 数据。
在 API 和配置文件都是 JSON 的今天,jq 是必备技能。
详细用法: (假设我们有一个 data.json)
{
"users": [
{"id": 1, "name": "Alice", "active": true},
{"id": 2, "name": "Bob", "active": false}
],
"metadata": {"timestamp": "2025-11-03"}
}
# 1. 自动格式化和高亮 (最常用)
cat data.json | jq .
# 2. 提取单个字段
cat data.json | jq .metadata.timestamp
# 输出: "2025-11-03"
# 3. 提取数组中的第一个元素
cat data.json | jq .users[0]
# 输出: {"id": 1, "name": "Alice", "active": true}
# 4. 提取所有用户的名字
cat data.json | jq .users[].name
# 输出:
# "Alice"
# "Bob"
# 5. 筛选:只找出所有 "active" 的用户
cat data.json | jq '.users[] | select(.active == true)'
# 输出: {"id": 1, "name": "Alice", "active": true}
5. fzf:万物皆可“模糊查找”
-
替代: Ctrl+R (history), find + grep
-
核心优势: 极快、交互式的模糊查找器,可以和任何其他命令组合。
fzf 本身是一个过滤器,但它真正的力量在于“组合”。
详细用法:
# 1. 终极杀招:反向历史搜索
# 在你的 .bashrc 或 .zshrc 中配置好后
# 按下 Ctrl+R,你会得到一个 fzf 驱动的、可模糊搜索的历史记录,远胜默认
(fzf-history-widget)
# 2. 模糊查找文件并用 nvim 打开
nvim $(fzf)
# 3. 模糊切换 git 分支
git branch | fzf | xargs git checkout
# 4. 模糊查找并杀掉进程
ps -ef | fzf | awk '{print $2}' | xargs kill -9
6. bat:带高亮的 cat
-
替代: cat
-
核心优势: 语法高亮、Git集成、行号、自动分页。
你再也不想用 cat 了。
详细用法:
# 传统 cat: cat package.json (一片黑白)
# 现代 bat: bat package.json
# (你会得到一个带JSON高亮、行号和分页的美丽视图)
# 显示行号,但高亮一个特定行
bat -H 10 README.md
# 显示非打印字符
bat -A my_binary_file
# 和 fzf 结合,实现实时预览
fzf --preview "bat --color=always {}"
7. eza:现代版的 ls
-
替代: ls
-
核心优势: 颜色、图标(需Nerd Font字体)、树状视图、Git状态。
让你的 ls 输出看起来像 2025 年的产品。
详细用法: (通常你会 alias ls=eza)
# 传统: ls -l
# 现代: eza -l
# (你会看到文件权限、大小、日期,还有文件类型图标和Git状态)
# 树状显示当前目录
eza --tree
# 树状显示,只显示2层
eza --tree --level=2
# 显示 Git 状态(M=修改, N=新增, ?=未跟踪)
eza -l --git
8. zoxide:会学习的 cd
-
替代: cd, cd .., cd ../..
-
核心优势: 它会“记住”你常去的目录,让你用最少的输入跳转。
你不再需要记住长长的路径。
详细用法:
# 1. 正常使用 cd (zoxide 会在后台默默学习)
cd ~/Code/MyProject/src/components
# 2. 几天后,你想再次进入
# 传统: cd ~/Code/MyProject/src/components
# 现代: z comp
# (zoxide 会自动匹配到你最常访问的、包含 "comp" 的路径)
# 也许你还有个 "company" 目录
# z c
# (zoxide 可能会提示你选择 "components" 还是 "company")
# 交互式选择 (和 fzf 联动)
z -i
# (弹出一个 fzf 窗口,让你从访问过的历史中模糊选择)
9. httpie:为人类设计的 HTTP 客户端
-
替代: curl
-
核心优势: 语法简单,JSON 自动格式化,颜色高亮,会话保持。
curl 是一个伟大的工具,但 httpie 让你用起来更快乐,尤其是在测试 API 时。
详细用法:
# 传统 curl (GET)
# curl -i -X GET "[https://api.example.com/users/1](https://api.example.com/users/1)"
# 现代 httpie
http GET [https://api.example.com/users/1](https://api.example.com/users/1)
# (甚至可以更短: http [https://api.example.com/users/1](https://api.example.com/users/1))
# 传统 curl (POST JSON)
# curl -X POST -H "Content-Type: application/json" \
# -d '{"name": "Gemini", "level": 100}' [https://api.example.com/users](https://api.example.com/users)
# 现代 httpie
http POST [https://api.example.com/users](https://api.example.com/users) name=Gemini level:=100
# (httpie 默认就是 JSON,:=100 是为了告诉它这是个数字,不是字符串)
# 自定义Header
http GET google.com "User-Agent:MyCLI/1.0"
10. git-delta:让 git diff 变得可读
-
替代: 默认的 git diff 查看器
-
核心优势: 语法高亮、并排视图(Side-by-side)、更精细的 diff 算法。
终端里的代码审查终于不那么痛苦了。
详细用法:
delta 不是一个直接运行的命令,而是一个你配置给 git 的“分页器”。
1. 配置你的 .gitconfig:
[core]
# 告诉 git 使用 delta 作为分页器
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
# 开启并排视图和行号
features = side-by-side line-numbers
syntax-theme = Dracula
# 减号和加号太扎眼,用更柔和的背景色
minus-style = "syntax #330000"
plus-style = "syntax #003300"
2. 正常使用 git:
# 配置好之后,你只需要像往常一样运行...
git diff
git show
git log -p
# ...你看到的将不再是红红绿绿的文本,
# 而是像VS Code中那样的、并排的、带语法高亮的 diff 视图。
总结
从 find 到 fd,从 grep 到 rg,从 cat 到 bat,这不仅仅是换个工具,这是在升级你的整个工作流。
这些工具共同打造了一个更智能、更快速、更符合直觉的终端环境。它们帮你减少了记忆繁琐参数的认知负担,让你能真正专注于代码和逻辑。
别再犹豫,现在就去安装它们吧! (大多数都可以通过 brew install <name>、apt 或 cargo 快速安装)。你的终端,值得你这样“宠爱”。

441

被折叠的 条评论
为什么被折叠?



