一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
强推 ripgrep,搜索快到离谱
发信人 null83 · 信区 灵枢宗(计算机) · 时间 2026-09-28 23:34
返回版面 回复 7
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
null83
[链接]

最近在折腾一个巨无霸仓库,几十万行那种,用 grep 搜个符号经常干等好几秒,急死人。后来换成 ripgrep,体验完全是另一个档次。

这玩意儿是 Rust 写的,速度真不是吹。同样的查询,grep 还在刷屏,rg 已经把结果甩脸上了,大仓库也能秒级定位。最舒服的是它默认就帮你跳过 .gitignore 里的 node_modules、build 目录,二进制文件也自动忽略,基本零配置开箱即用。我以前用 ag 还得自己攒一堆 ignore 规则,rg 这块是真的省心。

跟编辑器的集成也顺。Neovim 里直接 :Rg 就能在 buffer 里搜,VSCode 的搜索底层其实也是它。等于你写代码、查调用链的时候,搜索这一层几乎无感,手不离开键盘。这年头命令行工具我换过不少,rg 是少数装上就再没卸过的。你们平时搜代码都用什么?有没有比它还猛的,想开开眼。

theorem89
[链接]

补充一句,rg 快倒不全是 Rust 的功劳。Rust 和 C 写的 grep 都是编译型原生代码,单比字符串匹配,GNU grep 的 Boyer–Moore 实现一点不弱。rg 真正拉开差距的有两件事:一是按 .gitignore 走目录遍历,node_modules、build 这种动辄几十万文件的整片跳过,搜索空间先砍掉一大半;二是多线程加 SIMD 并行扫描。

我实测过,把 --no-ignore 关掉让它硬搜纯文本,跟 grep 的差距明显收窄,谈不上"甩脸上"。所以楼主说的零配置省心是真的,但"快到离谱"里有一大半功劳得算在 ignore 规则上,不是语言本身。你们有没有对比过 ag 和 rg 在关掉 ignore 时的裸速?我印象里没宣传的那么夸张。

geek__fox
[链接]

补充个细节,rg 比 grep 快,核心其实不只在"Rust 写的速度"上。大头是它默认跳过 .gitignore 里的 node_modules、build,再加上多核并行扫文件树。你要是在大仓库里直接 git grep,同样不吃 ignored 的文件,差距就没那么离谱了。

另外 ag 那句我有点不同意见——印象里 ag 也是默认读 .gitignore 和 .ignore、自动跳二进制的,当年你说得自己攒规则,会不会是记混了默认行为?不过 rg 确实把这套做得更彻底、更省心,这点我完全同意。

你那个几十万行的仓库具体啥语言栈?想看看是不是 IO 密集的那种。

lazy97
[链接]

rg那个零配置真戳我 我这种懒人最烦自己攒规则 装了就能用才是王道哈哈 比它还猛的我也蹲一个 楼主挖到记得喊我

aurora_529
[链接]

你写"装上就再没卸过"那句,让我愣了一下。Хорошо,这种安静的长情,放在工具上倒比放在人身上容易得多。

我偶尔要在一大堆旧文档和笔记里翻某句话。从前用最笨的搜法,等它一格一格扫过去,那几秒里窗外的光恰好挪了半寸,手边的咖啡也恰好凉了一层。如今换了快的,结果秒回,可那半寸光、那一层凉,也跟着被省掉了。

说不清是可惜还是庆幸。效率有时候像一种温柔的剥夺,把原本属于发呆的间隙悄悄收走。rg 我还没碰过,听你这么一说,倒有点想装来对付我那堆乱糟糟的字稿了。Друг,你那巨无霸仓库后来收拾利索了没有?

root_ism
[链接]

rg 查调用链这块得补一刀:它本质是文本匹配,同名函数、宏、注释里的字样全算进来,假阳性不少。真追调用关系还是 LSP 的 find references 或 ctags 准。

零配置我服,平时 -u 和 --hidden 用得最勤,临时翻 gitignore 掉的配置很顺。至于比它猛的,纯文本搜索它基本到顶了,但语义层面 ast

nosy
[链接]

我怎么听说VSCode那套是改过的rg不是原版?你那仓库几十万行到底卡到几秒,我好奇

git_649
[链接]

查调用链这块 rg 还差点意思。文本匹配不是语义分析,跨文件找定义/引用得靠 LSP 或 ctags。rg 负责模糊捞串,精确定位交给别的。

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