ripgrep 快速上手:命令行文件搜索的安装方法与 4 个高频场景
【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep
ripgrep(缩写 rg)是一款基于正则表达式的文件搜索工具,递归扫描目录时自动遵守 .gitignore。反直觉的一点:它默认不搜的东西,比它搜的更值得先了解。装好、会用、会排查"搜不到",这一篇就够。
先搞懂 ripgrep 的三个默认行为
rg 搜得快又干净,全靠三条默认过滤规则;不先懂它们,后面排查"搜不到"全靠猜。
- 遵守 .gitignore:git 忽略的文件(构建产物、依赖目录等)直接跳过。好处是结果只跟版本管理的内容相关;副作用是文件一旦进了 .gitignore,默认就搜不到。
- 跳过隐藏文件:以点开头的文件和目录(如 .git、.config)不进入扫描。结果保持干净,但隐藏目录里的内容需要显式打开才能搜。
- 跳过二进制文件:图片、压缩包、可执行文件一律不扫,避免刷屏和拖慢速度。想搜压缩包里的一段文本,默认是搜不到的。
按需求选择安装方式:包管理器还是源码编译
装之前先想清楚要哪个版本:求稳用包管理器一行搞定,要最新特性或 PCRE2 再自己编译。
求稳路线:包管理器。依赖自动处理、随时可升级,版本可能比官方发布略旧,对大多数人足够:
| 系统 | 安装命令 |
|---|---|
| macOS | brew install ripgrep |
| Ubuntu / Debian | sudo apt-get install ripgrep |
| Arch Linux | sudo pacman -S ripgrep |
| Fedora / RHEL | sudo dnf install ripgrep |
| Windows | choco install ripgrep或scoop install ripgrep |
尝鲜路线:源码编译。共四步:
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ri/ripgrep - 用 rustup 安装 Rust 工具链,并加载环境变量
cargo build --release编译出二进制- 把
target/release/rg放进 PATH 中的目录,如/usr/local/bin
想要 PCRE2(支持后向引用等高级语法),编译时加--features pcre2,它是 Cargo.toml 中声明的可选特性。
装完跑一条命令验证:
rg --version能看到版本号(当前 15.x)即安装成功,输出里还列着 SIMD、PCRE2 等编译特性的开关状态。
四个高频搜索场景
记住下面四个场景,日常搜索基本不用再查手册。
全盘找内容
- 需求:在当前目录里找出某段内容出现在哪些文件。
- 命令:
rg "pattern" - 为什么有效:递归扫描当前目录,同时自动避开被 git 忽略的文件,结果默认就是干净的。
按类型或目录找
- 需求:只搜 Rust 文件,或只搜匹配某个通配规则的文件。
- 命令:
rg -t rust "fn main";换通配规则则用rg -g "*.rs" "TODO" - 为什么有效:
-t限定文件类型(rg --type-list可看全部类型,-T排除类型),-g按 glob 过滤,范围先收窄再匹配,速度更快。
带上下文精确定位
- 需求:光看匹配行不够,要连着前后代码一起看明白。
- 命令:
rg -n -C 2 "panic" - 为什么有效:
-n显示行号方便编辑器跳转,-C 2前后各带 2 行;想更细可用-A 3、-B 2,-H强制显示文件名。
先看扫描范围再搜
- 需求:不确定会扫到哪些文件,先确认范围再动手。
- 命令:
rg --files - 为什么有效:只列出会被搜索的文件,不搜内容;配合
--max-depth 3限制递归深度,范围可控后再精确搜。
没搜到结果?逐个关掉默认过滤
搜不到多半不是 bug,而是默认过滤在生效。按下面顺序逐个排除:
- 在隐藏文件里?
.git等隐藏目录默认跳过,--hidden打开。 - 在二进制文件里?默认跳过,
-uu连二进制一起搜。 - 被 .gitignore 忽略了?从
-u开始逐步关闭过滤,-uuu把隐藏、二进制、忽略规则全部放开。 - 只想关忽略规则、保留跳过二进制?用
--no-ignore,比-uuu范围更窄。
💡
-uuu是无差别搜索,大仓库里会明显变慢,找到原因后尽早收窄条件。
组合配方速查
记不住参数组合?下面这几条可以直接照抄:
| 配方 | 什么时候用 | 效果 |
|---|---|---|
rg "pattern" | 在当前目录找内容 | 递归搜索,自动避开 git 忽略的文件 |
rg -t rust "fn main" | 只搜指定类型的文件 | 按文件类型限定范围 |
rg -i -w "TODO" | 大小写混写、只要整词 | 忽略大小写且整词匹配,不会命中 TODOList |
rg -n -A 3 "err" | 想看匹配行之后的代码 | 显示行号及后 3 行 |
rg -g "*.rs" "impl " | 用通配规则过滤文件 | 只搜 .rs 文件 |
rg --files | 先确认会扫到哪些文件 | 只列文件,不搜内容 |
rg -uu "pattern" | 怀疑内容藏在二进制里 | 连二进制文件一起搜 |
在一个干净的 git 仓库里,rg "xxx"基本就是"只搜该搜的",这也是它比传统工具快的原因。想继续深入,可以研究-t与-g的组合,给自己攒几个搜索预设。延伸阅读:
- 项目概览:README.md
- 完整用户指南:GUIDE.md
- 常见问题(解释为什么默认跳过二进制):FAQ.md
- 帮助文本源码:crates/core/flags/doc/help.rs
【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考