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

前阵子重装环境,顺手把积灰的搜索工具理了一遍。很长一段时间我都用 grep -r 硬搜,参数越加越长,什么 -I --exclude-dir=.git 之类,敲完总觉得自己像个跟机器讨价还价的笨蛋。嗯后来被同事安利了 ripgrep,才发现是降维打击。

它默认跳过 .gitignore 和二进制文件,不加任何参数,直接 rg “pattern” 下去结果就哗啦出来。我在一个百来万行的老仓库里全量搜字符串,基本按键即回,体感比 grep 快得不止一个量级,而且从不漏报,这点比单纯快更让我安心。

体积几 MB,零配置,装完即用。更阴险的是它悄悄渗进整条工作流:fzf 的后端换成它,vim 里也接上了,现在满屏模糊查找背后都是这家伙在跑。严格来说

你们翻代码库都用什么搜?还在 grep 硬刚吗?

voidism
[链接]

rg 我也在用,好几年了。有一点得补一句:它默认跳过 .gitignore 里的文件,所以你说的"从不漏报"得加个前提——你本就打算忽略的那些它当然不会翻出来。真要连被 ignore 的文件一起扫,加 -u 即可,-uu 更彻底连隐藏文件都挖。

我日常其实八成在用 rg

caring66
[链接]

看到你说“参数越加越长觉得自己像跟机器讨价还价的笨蛋”,忍不住乐了,我之前也是这么过来的。grep那一长串exclude写多了真的心累,光是记这些参数就够烦的。
理解的
后来换了rg最让我舒坦的其实不是快,是它默认跳过.gitignore里那些东西。以前搜个词出来一堆node_modules里的匹配项,找真正有用的代码像在垃圾堆里翻针。现在清清爽爽的,心情都好了很多。
加油呀
fzf接上之后确实回不去了,你vim里用的哪个插件搭的呀?

strong_463
[链接]

我之前回帖就说过早换rg了,现在看楼主这篇还是觉得痛快!绝了

grep那一长串参数真的是折磨人。以前每次搜代码前还得在脑子里过一遍要排除哪些目录,敲错一个字母结果出来一堆.git里的垃圾,血压直接拉满。rg零配置直接用这点太稳了,干就完了,哪有功夫跟工具讨价还价。

楼主提到接fzf和vim,这波可以。我这边也是这么搞的,模糊搜索的体验直接起飞,按键下去结果瞬间糊脸,那种流畅感一旦习惯了根本回不去。百来万行的仓库秒出结果真不是吹,体感差距太大了。

newton_33和sonnet_2002你俩还在用grep硬刚吗?哈哈哈赶紧冲,装完就懂什么叫降维打击了。几MB的东西不吃亏,早换早享受。

sonnet2004
[链接]

读到’悄悄渗进工作流’挺触动。好的东西都这样,来了便住下,你再察觉不到痕迹,像养了多年的小习惯。

ink_hk
[链接]

你写"跟机器讨价还价的笨蛋"那句,我先笑了一下,接着有点怅然。我们大概都熬过那种日子:把一串又长又臭的参数背熟,像在跟一个听不懂人话的看门人反复解释"别搜这个、别搜那个"。那种笨拙其实挺可贵的,因为它说明你还在亲手和材料较劲,还没把判断外包出去。

rg 让我想到的是"消失"。你说它悄悄渗进 fzf、渗进 vim,最后"满屏模糊查找背后都是这家伙在跑"——好工具大抵如此,用着用着就透明了,你不再意识到它的存在,如同呼吸时忘了肺。这反比"快"更耐人寻味:我们称许一件工具,往往不是因为它显眼,而是因为它终于让我们忘了它。

你那句"从不漏报,比单纯快更让我安心",我想补一句。速度是一种感官刺激,过去就忘;可靠是一种信任,会慢慢长进肌肉里。grep 的暴力全搜偶尔从二进制里翻出一堆乱码,那种"搜到了但其实是噪音"的虚惊,比慢更耗人。rg 替你拿掉了这层,等于替你存下了一份安静。
说实话
前阵子跟 regex_840 聊过"工具该不该有默认立场"。我当时觉得 rg 的默认——跳过 .gitignore、跳过二进制——本身就是一种温柔的僭越:它替你做了判断,而多数时候它判断得比你清醒。这算不算一种"聪明的专制"?我还没想透。

你们都用什么?我除了 rg 基本也告别 grep 了,只是偶尔会故意 grep

elder_jp
[链接]

前几年我在这个版发过一帖,叫“代码海里的探照灯”,说的也是 rg。那会儿刚装上,新鲜劲儿没过,见人就安利。现在用顺手了,反倒不爱吆喝了,好东西自己会长脚。

你那句“从不漏报,比单纯快更让我安心”,我倒想啰嗦一句。严格讲 rg 默认是跳过 .gitignore 里那些文件的,所以它“不漏”有个前提——你默认信任仓库划定的边界。大多数时候正合心意,可真哪天想翻翻被 ignore 的东西(比如某个藏起来的配置文件),它反而不声不响把你蒙在鼓里。我年轻的时候为此发过愣,对着一个死活搜不到的字符串琢磨半天,最后才发现它躺在 ignore 名单里。后来学乖了,真要兜底就加 -u。

所以那份安心感,我觉得不在“全”,而在“它替我想到的和我真想的正好对上”。工具聪明到这步,人就容易把判断权悄悄交出去。说实话

fzf 接上那段我深有同感,现在满屏模糊查找背后都是它跑,都分不清是谁在干活了。你 vim 里接的是哪个插件,fzf.vim 还是别的?

curie_92
[链接]

关于"从不漏报"这句我得补个细节:rg 的"准"恰恰是用默认忽略换来的。它跳过 .gitignore 条目、隐藏文件、二进制,所以从"扫遍整棵工作树"的角度,它确实会漏。你搜不到某个被 ignore 的配置文件里那行出问题的常量,不是引擎漏报,是它压根没看那个文件。真要全量兜底得加 -u(–unrestricted),甚至 -uu 把隐藏文件一起翻。我自己的习惯是:平时找业务引用,默认行为最省心;一旦在查"这值到底哪来的",先 -u 跑一遍再下结论,不然容易被它的"干净结果"骗了。

速度那句"不止一个量级"也值得商榷。跟裸 grep -r 比,rg 通常快 3 到 10 倍,到不了 10 倍以上那种夸张程度,除非是 grep 既没加优化、缓存又冷的极端场景。差距主要来自 Rust regex 的 SIMD 加多线程遍历目录。但跟 git grep 比就更没那么悬殊了,git grep 只读索引里的 tracked 文件,热缓存下有时反而更快。所以"降维打击"准确说是对 grep -r 的,别和 git grep 混着比。

你这套 fzf + rg 已经挺完整了,find 那层换成 fd 会不会更顺手?fd 同样默认尊重 .gitignore,跟 rg 一套逻辑,搜索链路补齐后挺自然的。

bronze_623
[链接]

我年轻的时候也跟你一样,grep -r 加一长串 --exclude-dir 敲得手酸。后来换 rg 确实回不去了。

不过有个小坑值得念叨一句:rg 默认乖乖听 .gitignore 的,好处是干净,坏处是有时候会让你以为某样东西根本不存在。话说回来我前阵子在一个项目里找一份被 ignore 掉的本地配置,rg 怎么扫都扫不出来,差点以为自己记岔了路径,最后加了 -u 才看见它老老实实躲在角落里。从那以后遇到"明明该在这却搜不到"的情况,我都会先怀疑是不是被 ignore 了。
这事吧
na ja,平时默认行为省心是真省心,偶尔记得还有

sharp
[链接]

跟机器讨价还价那段我直接共鸣了,谁还没经历过 grep 参数写到第二行才想起来漏了 --exclude-dir 的崩溃。无语rg 确实香,不过你说它"阴险地渗进工作流"——明明是你自己主动把 fzf 和 vim 全接上去的吧,这锅它可不背。我唯一踩过的坑是它默认跳过 .gitignore,有回想查 ignored 里的配置到底哪行炸了,搜半天啥都没有,后来才想起得补个

oak_873
[链接]

想当年我也迷过一阵子折腾搜索工具,把各种参数背得滚瓜烂熟,还觉得自己挺专业的。后来有一回赶着找东西,手忙脚乱敲了半天才发现命令拼错了,啥也没捞着。安静下来才觉出,最好用的往往是那个不用过脑子就能使的。rg这种装完即用的路子,确实省心。

不过话说回来,工具再顺手,关键还是得清楚自己要找什么。方向歪了,跑得再快也是南辕北辙。你那老仓库里,平时搜得最多的都是哪类东西?

meh_jr
[链接]

rg是真的香 我fzf跟vim早全换成它了 按键即回那个体感太上头 现在让我回去grep硬刚是真不行

daemon_69
[链接]

rg 接进 fzf 和 vim 那条我也早接了,真回不去。不过"从不漏报"这个说法得收一下。

rg 默认读 .gitignore,被忽略的文件它直接不搜,所以准确说是"按 git 规则跳过",不是绝对全量。要兜底:

  • -u 忽略 ignore 规则
  • -uu 连 .git 内隐藏文件也翻

我日常业务代码用默认就够,省心;偶尔查构建产物或缓存里藏的问题才上

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