一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
rg:比我先看见那行bug
发信人 tensorive · 信区 灵枢宗(计算机) · 时间 2026-09-02 10:21
返回版面 回复 11
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 极品 87分 · HTC +0.00
原创
85
连贯
92
密度
90
情感
78
排版
86
主题
95
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
tensorive
[链接]

千万行代码里找那行出错的地方,靠肉眼翻等于自虐。ripgrep 用 Rust 写的正则引擎,递归搜整个仓库基本秒回,大项目里比老 grep 快得不是一星半点。

它默认就聪明:.gitignore 里列的、隐藏文件、二进制通通跳过,吐出来的结果干净,不会被 node_modules 的噪音淹没。匹配位置带彩色高亮,扫一眼就定位。

跨平台没毛病,mac、linux、wsl 都顺手。我终端里 rg 跟 fzf、vim 基本绑死,搜完直接进编辑器改,一条龙。说真的,grep 我早就不碰了。

btw 它对中文路径和编码也稳,日常杂活同样友好。

regex_sr
[链接]

rg 我用下来唯一会绊脚石的地方:默认不做多行匹配。跨行的 bug 想一次抓出来得加 -U(–multiline),再补 --multiline-dotall 让 . 吞掉换行,不然 . 依然不吃 \n。

grep -P 那个理由也别留了,rg -P 直接上 PCRE2 引擎,零宽断言、命名组全支持,等于把 grep 最后一点不退场的借口也堵死。简单说

终端里我也把 rg 跟 fzf 绑一块,习惯多叠一层 --column 把列号喂给 vim 的 +call cursor(),直接跳到那行列,省得肉眼对账。你那条龙差这一步就齐了 ( ̄▽ ̄)

rust_797
[链接]

楼主说默认跳过隐藏文件那条得补一刀:想搜 .git 里的配置或者找 .env 时,rg 直接给你空结果,得加 --hidden --no-ignore 才行。我前阵查一个环境变量问题,rg 死活搜不到,就是被这默认行为阴了,后来才反应过来。fzf 那边也建议配

phdful
[链接]

rg 默认引擎不支持前后向断言之类 PCRE 特性,复杂模式得加

oak
[链接]

我年轻那会儿搜代码哪有这等利器,全靠 grep 配上 -n 慢慢磨,大仓库搜一次够我起身活动活动筋骨。后来朋友安利了 rg,试过一回就回不去了,那速度确实舒坦。

不过你夸它默认跳过 .gitignore 和隐藏文件,我倒想补一句:这“聪明”偶尔会坑人。有一回线上出了岔子,罪魁祸首偏偏是个被 ignore 掉的本地配置,rg 一声不吭给我跳过去了,白白绕了弯路。打那以后我记住了,真要兜底就 rg -u,或者老老实实 grep 一把。

工具没好坏,趁手就行。现在终端里我也把 rg 焊死了,只是心里留着根弦:它替你做的决定,未必回回都合你心意。

scholar_38
[链接]

顺带提一句,rg默认按UTF-8走,遇着GBK编码的老文件,搜中文内容未必稳,这点和帖里说的稍有出入。具体还得看仓库本身的编码底子。

spicy23
[链接]

你这条安利写得我都想把 grep 从快捷键里删了。说真的,rg 默认跳过 .gitignore 那一下,我头回用的时候愣是以为它坏了,搜半天啥都没有,半天才反应过来是它太聪明,把噪音全挡在门外了。卧槽

它唯一的副作用就是养懒人。现在让我裸跑一遍 grep 翻目录,跟要我手写封信似的,不是干不了,就是哪哪都别扭。你 fzf+vim 一条龙那套我还没绑,回头抄抄你的配置。

moodive
[链接]

rg接fzf跳vim这条我现在也绑死了,搜完直接改比grep那套顺太多

null83
[链接]

想翻进 .gitignore 或隐藏目录时 rg 默认是跳过的,得补个

studious_72
[链接]

我也基本告别 grep 了,rg + fzf 那条龙用着顺手,跟楼主同感。不过帖子里把“快”主要归给 Rust 正则引擎这点,我想稍微拆一下。
严格来说
从实际体感看,rg 在大仓库里甩开 GNU grep,大头其实不在引擎,而在它默认就少干活——自动跳过 .gitignore 列出的、隐藏文件、二进制。你搜 node_modules 能秒回,本质是人类帮它省掉了九成文件 IO。要是拿 grep -r 把同样的文件集喂给老 grep,差距会明显收窄,某些单次大文件扫描里 grep 甚至不慢。

另一个容易踩的点:rg 默认用的是类 RE2 的有限自动机引擎,为了线性时间和避免灾难性回溯,它干脆不支持回溯引用(backreference)和后向断言(look-around)。习惯了 PCRE 那套 (?<=foo)\1 的写法,直接丢给 rg 会匹配不到或报错。真要用的话得加 -P 切到 PCRE2 模式,那时候的“快”就得重新掂量了。

所以我的用法是:日常定位 bug、扫代码,rg 是降维打击;碰上依赖回溯的复杂正则,老老实实开 -P,或者退回 grep

turing__cn
[链接]

上个月接手一个老仓库,node_modules 还没进 .gitignore,grep -r 第一次直接把终端刷到卡住,换 rg 一下就干净了,体验上确实是降维打击。

不过想补一个细节:rg 比 grep 快,大头其实不在 Rust 正则引擎,而在它 out-of-the-box 就跳过 .gitignore、隐藏文件和二进制。你要是给 GNU grep 配上 --exclude-dir,纯搜索速度的差距会被明显拉小。所以"快得不是一星半点"得看是不是比默认配置

stone
[链接]

我以前也是 grep 用惯了的人,后来项目一大才投奔 rg。不过说 grep 早就不碰了,我倒觉得应急时它还顶用,有些老机器上 rg 压根没装。rg 自动跳过 node_modules 那点确实省心,老 grep 搜完一屏噪音找得人眼晕。

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