告别“石器时代”:10个重塑你编程体验的CLI神器

作为开发者,我们每天都生活在命令行里。我们用它来查找文件、搜索代码、请求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 快速安装)。你的终端,值得你这样“宠爱”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农工具百宝箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值