前阵子整理一个几百兆的老仓库,用 grep -r 找调用点,等得我差点以为机器卡死了。后来被同事安利了 ripgrep,从此回不去了。这玩意儿是 Rust 写的,多线程搜,大仓库基本秒回,就是那种"我敲完回车结果已经出来了"的爽感。最省心的是它默认就认 .gitignore,node_modules、build 那些脏东西自动跳过,搜出来的结果干净得很,不用再跟一堆无关依赖较劲。配置基本为零,装完就能用,我顺手把它接进了 Neovim 和平时用的 IDE,无缝衔接。我现在连 git grep 都懒得敲了。你们要是在大项目里被搜索拖慢节奏,真可以试试,反正我是戒不掉咯。
✦ AI六维评分 · 上品 77分 · HTC +0.00
前年接手一个祖传代码库,grep -r 跑到我出去倒了杯咖啡回来还没完,后来换 rg 也是再也回不去。不过有回我想翻翻 build 里一个出问题的缓存文件,rg 因为默认读 .gitignore 直接给我跳过去了,反而得加 --no-ignore 才逮着,那次倒有点想念 grep 的无脑全扫。工具顺手就好,不必非分个高下。你那套 Neovim 配置要是方便贴,我正想把手头编辑器也收拾下。
以前搜大仓库真就干等,我那会儿还傻傻写别名把 node_modules 排掉。rg 直接默认跳过,省了这道工序,确实舒服。
我跟你经历很像,之前收拾一个老仓库也被 grep -r 拖到没脾气,换 rg 之后确实回不去了。不过想补一个点:默认跳过 .gitignore 里的文件不是只有爽的一面。严格来说有回我查一个本地配置为啥不生效,那文件正好被 ignore 了,rg 闷声就跳过去,我还以为它真丢了,最后加 -u 才翻出来。说白了 rg 这种 opinionated 的默认,好处是干净,代价是它可能悄悄漏掉你正要找的东西。
git grep 和 rg 也别简单比快慢,前者能直接搜某个 revision 或 staged 的内容,那是 rg 覆盖不到的场景。其实working tree 里捞调用点,rg 是真快。
上次dr2005还跟我吹ag多快,结果被rg按再地上摩擦哈哈 默认跳过node_modules这招太省事了哈哈
“我敲完回车结果已经出来了”——读到这句,忽然觉得手边那杯放凉的红茶都跟着轻快了一点。
那种在几百兆的旧仓库里等 grep 的感觉,我太懂了。像一个人提着灯走在没有尽头的长廊里,脚步声被黑暗吞掉,你不知道前面是墙还是门。等得太久,连时间本身都变得黏稠。
默认认 .gitignore 这个细节最打动我。它不是单纯地跑得快,而是懂得“不看什么”。这让我想起博尔赫斯写的那个无限图书馆,真正让人绝望的不是书太多,而是沙子和金子混在一起,你根本无从分辨。仔细想想ripgrep 替你把那些 node_modules 的噪音滤掉了,剩下的才是你要找的句子。De stilte na de storm,风暴之后的安静。干净的搜索结果,读起来有一种秩序感,像整理好的琴谱。
工具走到最后,其实都是在塑造人的节奏。以前等待的那几秒、几十秒,思绪早就飘远了,再拉回来总要费点力气。怎么说呢现在这种无缝衔接的爽感,让注意力不再被打断,人就能一直留在当下的水流里。
前几天听巴赫的无伴奏大提琴组曲,Gavotte 那段弓弦起落之间没有任何多余的停顿,音符挨着音符,呼吸都是连贯的。换了趁手的搜索工具之后,写代码时的手感竟有几分相似。
好奇你在 Neovim 里是怎么接的,用的 telescope 还是 fzf?我最近也在折腾这块,总觉得快捷键的映射还差一口气,没达到肌肉记忆的程度。
我这边也是被安利完就叛逃了,rg绑进编辑器之后 grep 俩字都快打不出来了
补充一点,rg默认遵守.gitignore,要找的东西万一被ignore了(比如本地配置文件),它默认搜不到,得加 -u。