好的,这是一个关于 fzf、fd 和 rg 这三个现代命令行神器(俗称“命令行三剑客”)的用法梗概。它们各自独立时已经非常强大,但组合使用更能发挥出惊人的效率。
核心思想
fd: 替代find,用来 找文件。rg(ripgrep): 替代grep,用来 找文件内容。fzf(fuzzy finder): 模糊搜索器,用来 从列表中交互式地选择。
它们的共同优点是:快、智能、用户友好。
1. fzf - 命令行模糊搜索器
一句话总结:一个交互式的过滤器,可以从任何文本输入中快速筛选并选择一项或多项。
fzf 是这三者中的“粘合剂”,能与各种命令无缝配合。
核心功能
- 模糊匹配:你不需要输入完整的词,只需输入几个关键字母,它就能找到匹配项。
- 交互式界面:实时反馈,上下键选择,回车确认。
- 高度可定制:可以自定义外观、快捷键和预览窗口。
- 与 Shell 深度集成:可以极大地增强
Ctrl+R(历史命令搜索)、Ctrl+T(文件路径补全)等功能。
常用场景与示例
-
基础用法:查找当前目录下的文件 直接运行
fzf,它会列出所有文件和目录,你可以模糊搜索并按回车,它会将你选择的文件名输出到标准输出。1fzf -
增强命令历史搜索 (Ctrl+R) 这是
fzf最受欢迎的功能。安装后,按Ctrl+R会调出fzf的交互式历史记录搜索界面,比默认的好用一万倍。 -
查找文件并用 Vim 打开 结合命令替换
$(...)或反引号`...`。1 2 3 4 5# 查找文件,然后用 vim 打开选中的那个 vim $(fzf) # 查找并选择多个文件打开 vim $(fzf --multi) -
作为管道中的过滤器
fzf可以处理任何通过管道 (|) 传给它的文本。1 2 3 4 5# 从 ps 结果中选择一个进程并结束它 ps -ef | fzf | awk '{print $2}' | xargs kill -9 # 模糊搜索并切换 git 分支 git branch | fzf | xargs git checkout
2. fd - 一个更简单、更快速的 find
一句话总结:一个为人类设计的、默认配置极佳的找文件工具。
fd 在功能上与 find 类似,但语法更简洁,速度更快。
核心功能
- 语法简单:
fd <模式>即可,不像find需要复杂的-name等参数。 - 智能忽略:默认忽略
.gitignore中定义的文件、隐藏文件和目录。这在项目开发中非常有用。 - 速度极快:利用并行处理,搜索速度通常比
find快得多。 - 彩色输出:结果按文件类型着色,一目了然。
常用场景与示例
-
基础用法:查找包含 “report” 的文件
1 2 3 4# 在当前目录及子目录中查找 fd report # 相当于 find . -iname "*report*" -
按扩展名查找
1 2 3 4 5# 查找所有的 markdown 文件 fd -e md # 查找所有的 jpg 或 png 文件 fd -e jpg -e png -
按文件类型查找
1 2 3 4 5 6 7 8# 只查找目录 fd -t d # 只查找文件 fd -t f # 只查找符号链接 fd -t l -
执行命令
-x或--exec参数可以对每个搜索结果执行一个命令。{}是占位符,代表找到的文件路径。1 2 3 4 5 6# 查找所有 zip 文件并解压 fd -e zip -x unzip {} # 批量修改文件名(将 .jpeg 改为 .jpg) fd -e jpeg -x mv {} {.}.jpg # {.}` 代表不含扩展名的路径 -
覆盖智能忽略 如果你想搜索隐藏文件或被
.gitignore忽略的文件:1 2 3# --hidden: 搜索隐藏文件 # --no-ignore: 不使用 .gitignore 规则 fd --hidden --no-ignore '^\.bash'
3. rg (ripgrep) - 一个超快的 grep
一句话总结:一个专注于速度和易用性的代码内容搜索工具。
rg 同样默认尊重 .gitignore,并且会自动跳过二进制文件,是程序员日常搜索代码的利器。
核心功能
- 速度极快:通常是
grep或ag(The Silver Searcher) 中最快的。 - 智能忽略:和
fd一样,默认忽略.gitignore和隐藏文件。 - 优秀输出:彩色高亮、显示行号、自动分组。
- 跨平台:在 Windows, macOS, Linux 上表现同样出色。
常用场景与示例
-
基础用法:在当前目录搜索字符串
1 2# 搜索包含 "main" 的所有行 rg main -
不区分大小写搜索
1rg -i "error"(
rg默认使用智能大小写:如果你的搜索词全小写,它就不区分大小写;如果包含大写,它就精确匹配。) -
仅列出包含匹配项的文件名
1rg -l "TODO" -
在特定类型的文件中搜索
1 2 3 4 5# 只在 python 文件中搜索 "import" rg "import" -t py # 不在 javascript 文件中搜索 "console.log" rg "console.log" -g '!*.js' -
显示上下文
1 2# 显示匹配行的前后各 2 行 rg -C 2 "important_function" -
统计匹配数量
1rg --count "User"
三者合璧:黄金组合
这三个工具的真正威力在于通过管道 (|) 结合,形成强大的工作流。
场景1:查找一个项目中的配置文件,然后交互式选择并打开。
fd负责快速找出所有.conf文件。fzf负责提供交互界面让你选择。vim负责打开你选择的文件。
|
|
场景2:在代码库中搜索一个函数,然后交互式地预览并跳转到该行。
这是最强大的组合之一,需要 fzf 的预览功能。
rg负责搜索函数名,并输出文件名:行号:内容。fzf负责交互选择,并使用--preview功能实时显示文件上下文。vim/vscode等编辑器负责打开文件并跳转到指定行。
|
|
当你选中一项后,可以进一步处理 fzf 的输出,提取文件名和行号,然后用编辑器打开。例如:
|
|
总结表格
| 工具 | 核心功能 | 经典替代品 | 关键优势 |
|---|---|---|---|
fzf |
交互式选择 | (无直接替代) | 模糊搜索、万物皆可过滤、高度集成 |
fd |
查找文件/目录 | find |
语法简单、速度快、智能忽略 |
rg |
搜索文件内容 | grep, ack, ag |
速度极快、智能忽略、输出友好 |