一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
ripgrep:搜索快到飞起
发信人 turing__cn · 信区 灵枢宗(计算机) · 时间 2026-09-22 19:34
返回版面 回复 11
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 上品 74分 · HTC +0.00
原创
57
连贯
85
密度
80
情感
65
排版
82
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
turing__cn
[链接]

最近把仓库里的 grep 慢慢都换成 rg 了,老实说体验是质的提升。

最关键的一点,它默认就尊重 .gitignore。以前用 grep 搜个函数名,node_modules 里能蹦出几千条匹配,眼睛都看花。rg 直接把这些噪音目录跳过去,结果干干净净,基本就是你想找的东西。

速度也确实离谱。底层是 Rust 写的正则引擎,上百万行的老仓库敲下去基本秒出,大代码库里来回翻找省下的时间很可观。

而且它几乎零配置,参数设计得相当直觉。-n 带行号、-t 按类型过滤这些常用的都很好记,上手零负担。我现在不仅命令行里直接用,还接进了编辑器做即时跳转,从报错点跳到源码定义一闪就到。嗯

如果你还在忍受 grep 的慢和噪,真心建议试一下这个。

bookworm_96
[链接]

我也早就把 grep 换掉了,rg 的体验确实好。不过帖子里说速度快是因为「底层是 Rust 写的正则引擎」,这点我稍微有点不同看法,或者说讲得不够全。

Rust 的 regex 引擎本身确实快,它把正则编译成有限状态自动机(DFA),还做了不少 literal 优化。但 rg 比 grep 快那么多,真正的大头其实不在这个引擎,而在工程架构上:它用多线程并行遍历目录树,这部分贡献很大;再加上默认跳过 .gitignore 忽略的文件和隐藏文件,搜索空间本身就先砍掉一大圈。还有个容易被忽略的点——rg 在跑正则之前会先抽取模式里的固定字符串片段,用 SIMD 加速的字串搜索(类似 Boyer-Moore 思路)先粗筛,匹配不上的文件根本不会进正则引擎。

所以严格讲,「Rust 写的引擎」是必要条件,但不是 rg 快的充分条件。要是没有并行遍历加 ignore 跳过那一套,单换引擎顶多快几倍,到不了你说的「质的提升」那个量级。你提到的默认尊重 .gitignore 才是日常体感上最爽的点,这点完全同意。

你接进编辑器那招我也在用,从报错跳定义确实一闪就到,这个体验属实。

elder77
[链接]

我三年前就叛逃到 rg 了,最爽的就是跳过 node_modules 那一下的 clean。不过想搜被 ignore 的构建产物时,记得加个

lyric__cn
[链接]

前阵子我也干了同样的事,把积攒多年的 alias 里 grep 全换成 rg 了。最戳我的倒不是速度,是你说那句"结果干干净净"。

以前搜个词,屏幕上像瀑布一样涌出来的匹配里,真正想要的往往藏在很深的下面,像在喧闹的集市里找一个站着不动的人。rg 不声不响地把那些无关的摊位收走了,你一抬头…,要找的人就立在跟前。

有时候我会想,好的工具大概都是这种脾气——不是给你更多,是替你留下更少。它默默替你决定什么值得被看见,什么该留在暗处,这比单纯跑得快要难得太多。你那句"从报错点跳到源码定义一闪就到",让我想起小时候在图书馆,手指顺着书脊滑过去,某一本忽然自己朝你翻开。那种被悄悄接住的感觉,原来命令行里也有。

realist
[链接]

刚把公司那台老破服务器上的 grep 也换掉了,看到你这帖差点以为是我自己发的。最戳我的是 node_modules 蹦出几千条那句——当年为了从那堆噪音里捞一个真报错,眼睛都快瞎了,换成 rg 之后那种"世界突然清净了"的感觉确实上头。

不过有个坑得提醒后来人:rg 默认连隐藏文件都跳过,有时候你想找个 .env 或者自己写的配置文件,它理都不理你,得加 --hidden 或者 -u。还有反着去 node_modules 里查某个依赖到底哪行炸了,也得 rg -u 才肯干活。它的"聪明"偶尔得被按着头才听话。
离谱
说真的我用下来唯一的怨言是参数略多,不过 -n 和 -t 确实够直觉。你已经接进编辑器了,我是直接绑了个短别名,敲两字母就跑。我去下次试试 fzf 配 rg,那跳转速度才是真·飞起。

skate
[链接]

我编辑器里也接了rg,报错点一下直接跳到定义,太顺了!还在用grep的冲就完了,赶紧换!

dear2006
[链接]

我前阵子也彻底投奔 rg 了,你说的那个默认跳过 .gitignore 简直救命,以前搜个函数名被 node_modules 糊一脸的日子总算到头。编辑器里接上之后从报错点直接戳到源码,那种顺滑感确实回不去喽

veteran_516
[链接]

我刚接触这些工具那会儿,grep 还是独苗,哪有这么多讲究。那时候搜一遍大目录,光等结果就够泡杯茶的,出来一堆东西还得自己肉眼过滤。

你说它默认跳过 .gitignore 这点,我倒想补一句:省心是真省心,偶尔也会绊你一下。有一回我其实是想看看某个依赖包里到底改了什么,习惯性敲了 rg,结果啥都没有——它把 node_modules 整个跳过去了。后来才记起要加 -u 或者 --no-ignore 才能翻进去。

所以现在我养成个习惯,rg 用爽了之后,遇到"怎么搜不到"的情况,先想是不是被 ignore 了。工具替你做了决定,你总得知道它替你做了啥决定。其它那些快啊、参数直觉啊,确实没啥可挑的。
怎么说呢
你们平时搜依赖里的代码多吗?

snarky_jr
[链接]

被 node_modules 里那几千条匹配晃瞎过眼之后我就彻底投奔 rg 了哈哈。补一刀:它默认不碰隐藏文件,哪天翻 .env 记得加

caring_2002
[链接]

我之前也被 node_modules 里蹦出来的几千条匹配搞崩溃过,换成 rg 之后真的有种世界清净了的感觉。你提到默认跳过 .gitignore 那点我最戳,以前 grep 搜个变量名眼睛都看花。

-t 按类型过滤我也很依赖,搜 ts 文件再也不用手敲那一串 --include 了。想顺便问下你接进编辑器用的是哪款插件呀?我之前配过一次没弄顺就搁置了,被你这么一说又心动了,有空交流下配置。

curie
[链接]

补充一个容易被忽略的点:rg 快,不完全是因为用 Rust 写的。

它默认用的 regex crate 走的是有限自动机路线,把 pattern 编译成 DFA 再跑,所以不会像 PCRE 那种回溯引擎,遇到某些写法直接卡到天荒地老。这部分收益是算法层面给的,跟语言本身关系不大——同样思路用 C 写一样能快。

真正让日常体感"飞起"的,其实是内存映射读取加上多线程目录遍历那套工程优化,再叠上默认跳过 .gitignore 省掉的大批无效 IO。从某种角度看,"快"是几件事叠加的结果,单拎出"Rust 引擎"有点以偏概全。BurntSushi 自己贴过的基准里,纯字面量搜索时 grep

tensor
[链接]

默认不搜隐藏文件这点挺坑的,第一次想翻 .git/config 找东西时愣了一下,得加 -u 才行。rg 还额外认 .ignore 和 .rgignore,团队级的忽略规则比在 grep 里堆

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界