ripgrep 十分钟跑通:3 个高频搜索场景,外加一套"搜不到"的排查顺序
【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep
ripgrep(命令行里叫rg)是一个按正则递归搜索目录的命令行工具:它默认跳过 .gitignore 里列出的文件、隐藏文件和二进制文件,不用像 grep 那样自己拼排除参数。本文带你走完一条动线:怎么装 → 3 个搜索场景怎么写 → 顺手起来的组合技巧 → 搜不到怎么排查 → 参数速查。
安装 rg 的三种方式,以及怎么确认装上了
按你的需求挑一条,最后都能拿到能用的rg:
| 方式 | 命令 | 适合谁 | 代价 |
|---|---|---|---|
| 包管理器 | macOS 用brew install ripgrep;Ubuntu/Debian 用sudo apt-get install ripgrep;Arch 用sudo pacman -S ripgrep;Fedora 用sudo dnf install ripgrep;Windows 用choco install ripgrep或scoop install ripgrep | 大多数人,依赖自动处理、随时可升级 | 版本可能比官方发布略旧 |
| 官方预编译二进制 | 从官方发布页下载对应系统压缩包,解包后把rg放进PATH目录 | 想要最新版、或包管理器里没有 | 要手动摆放,不自动更新 |
| 源码构建 | Rust 工具链 +cargo build --release | 想尝新特性、或开启 PCRE2 后向引用等高级语法 | 要编译,PCRE2 需链接系统库 |
源码构建就先git clone https://gitcode.com/GitHub_Trending/ri/ripgrep再编译。PCRE2 在 Cargo.toml 里被声明为可选的pcre2feature,编译时加--features pcre2就会链接进去。
装好之后跑这条命令确认一下:
rg --version✅ 看到版本号(当前为 15.x)就算成功,输出里还会列出 SIMD、PCRE2 等编译特性的开关状态。
最常用的 3 个搜索场景怎么写
全盘找一个字符串——rg "TODO"递归搜当前目录,自动避开被 git 忽略的文件。为什么这么写:rg 的默认行为已经把忽略规则、隐藏文件、二进制都过滤掉了,结果天然干净,不用堆参数。
只搜某种文件类型——rg -t rust "fn main"限定在 Rust 文件里找。为什么:-t用的是内置的类型定义,比手写 glob 更准也更快;不确定有哪些类型时,先rg --type-list看一遍。
精确找词,避免误伤——rg -i -w "TODO",-i忽略大小写,-w要求整词匹配。为什么:整词匹配能让TODO不再命中TODOList这类同前缀的词。
收尾一句话:三个场景覆盖的正是日常最高频的三种需求——全盘找、按类型找、精确找。
从能用到顺手:3 个组合技巧
先看范围再搜:rg --files不搜内容,只列出会被扫描的文件。大仓库里先跑一遍确认"它到底会扫到什么",再决定要不要收窄。
行号 + 上下文:-n显示行号,方便回编辑器跳转;-A 3/-B 2分别显示匹配行后 3 行、前 2 行,省事就用-C 2前后各 2 行。
glob + 深度双重收窄:-g "*.rs"限定文件范围,--max-depth 3限制递归深度。两个叠起来,搜索范围立刻可控。
💡 实用习惯:先
rg --files看范围,再带-C 2精确搜,比盲目全盘搜更快,也不会被噪音刷屏。
搜不到结果时,按这个顺序排查
现象:某串字符明明在仓库里,rg却什么都没输出。多数情况不是 bug,而是默认过滤在生效。按这个顺序查:
- 先怀疑:在隐藏文件/目录里吗?rg 默认跳过
.git这类隐藏目录,--hidden把它们包含进来。 - 再怀疑:在二进制文件里吗?二进制默认被跳过,
-u每加一个就放开一层过滤,第一个-u就是包含二进制文件。 - 接着:.gitignore 把它忽略了么?只想放开忽略规则、保留二进制跳过的话,用
--no-ignore,范围比全放开更窄。 - 兜底:
-uuu一次性关掉隐藏、二进制、忽略三类过滤。
⚠️ 过滤全部放开后,大仓库里会明显变慢,确认原因后尽早收窄条件。至于 rg 为什么默认跳过二进制,见 FAQ.md 里的解释。
参数速查:常用选项一览
| 选项 | 作用 |
|---|---|
-i | 忽略大小写 |
-w | 整词匹配 |
-n | 显示行号 |
-H | 显示文件名 |
-A/-B/-C | 显示匹配行后 / 前 / 前后 N 行上下文 |
-t/-T | 限定 / 排除文件类型 |
-g | glob 通配过滤 |
--hidden | 包含隐藏文件和目录 |
--no-ignore | 只关闭 gitignore 规则 |
-uuu | 关闭全部过滤(隐藏、二进制、忽略) |
--type-list | 列出全部可用文件类型 |
--max-depth | 限制递归深度 |
想再深入,有两个方向:把-t和-g组合出自己的"搜索预设"并写进配置文件;以及弄清 rg 的默认过滤行为,这样遇到结果异常能推理出原因,而不是靠猜。rg --help帮助文本的源码在 crates/core/flags/doc/help.rs,对着帮助输出读一遍会更清楚每个选项的边界。
延伸阅读:
- 完整用户指南: GUIDE.md
- 常见问题(为什么跳过二进制、怎么搜非 UTF-8 文件等): FAQ.md
- 项目说明与工具对比基准测试: README.md
【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考