入职的第一个任务,做 AI 编程平台,前端是 Aionui 开源二开,后端是rust,天知道 rust 是个啥,于是我被迫开始学习用 rust。但不得不说,AI 写代码改 bug 真的爽,还可以跟 AI 学习解决问题的过程。这不,今天就学会了一招:用 rg 快速定位问题。
简介
rg = ripgrep, 是超快的递归文本搜索工具,比系统自带 grep 快很多,默认自动忽略 .gitignore、隐藏文件、二进制文件,用来递归查找项目里的代码、关键词,超爽!不愧是高性能命令行文本搜索工具。
安装
# mac
brew install ripgrep
# ubuntu/debian
sudo apt install ripgrep
# windows (scoop / choco)
scoop install ripgrep
choco install ripgrep
基础语法
rg [选项] "搜索词" [路径]
不写路径默认递归搜索当前目录
1. 最常用最简单的搜索
rg "useState"
当前目录递归搜 useState,自动跳过 gitignore 里的文件、node_modules。
2. 精确整词匹配(避免部分匹配)
rg -w "user"
# 只会匹配 user,不会匹配 userInfo、username
3. 大小写忽略
rg -i "api"
# Api / API / api 全都命中
4. 只看文件名,不看匹配内容
找包含关键词的文件。
rg -l "fetch"
5. 只搜指定后缀文件
# 只在 ts / tsx 文件里搜索
rg "interface" -g "*.ts" -g "*.tsx"
# 排除某些文件/文件夹
rg "axios" -g "!node_modules/**"
-g= glob 过滤;!代表排除
6. 显示行号 + 上下文
# 匹配行,外加前后2行
rg "CSP" -C2
# 只看上面2行 -B(Before)
rg "CSP" -B2
# 只看下面2行 -A(After)
rg "CSP" -A2
7. 正则搜索
rg默认开启正则
# 匹配 const 开头,后面跟变量
rg "^const\s+\w+"
如果要搜索纯文本,不要正则,加
-F(fixed string)
rg -F "import { useState }"
高频组合
# 1. 在ts/tsx搜索关键词,忽略大小写,显示文件名
rg -i "router" -g "*.ts" -g "*.tsx" -l
# 2. 搜TODO注释
rg -i "todo"
常用参数速查表
| 参数 | 作用 |
|---|---|
-i | 忽略大小写 |
-w | 完整单词匹配 |
-l | 只列出匹配的文件名 |
-C N | 展示匹配行前后N行上下文 |
-g | glob筛选文件,! 排除 |
-F | 字面字符串(关闭正则) |
-v | 反向匹配:输出不包含关键词的行 |
-h | 不显示文件名 |
和 grep 核心区别
- rg 默认递归搜索,grep 需要加
-r - rg 默认自动忽略
.gitignore、二进制、node_modules - 速度远快于grep,大项目差距巨大
VSCode 搭配
很多VSCode插件底层就是rg;终端里跑rg适合快速批量检索代码库。
补充:其他框架对比
| 工具 | 特点 |
|---|---|
| rg | 默认 gitignore、并行、跨平台,现代代码检索首选 |
| grep | 系统自带,递归需要 - r,不会自动忽略 node_modules |
| ag/ack | 老一代搜索工具,性能弱于 rg |
| git grep | 只搜索 git 仓库内文件 |