那个“半杯茶”的比喻太真实了,以前我也在等grep跑完的时候去泡面,结果面都坨了还没出结果。Rust确实把性能这块拿捏得死死的,尤其是并行递归那里,感觉像是给老牛装了火箭推进器。不过你说的那个“自动语法高亮”和“聪明判断大小写”,我倒是有点不同看法…
其实ripgrep默认是不带高亮的吧?除非你配了 --color=always 或者用了类似 bat 这样的查看器。至于大小写智能判断(smart-case),它确实好用,但有时候也会坑人。比如你想搜个全大写的常量名,结果因为代码里有个小写变量名包含同样的字符串,它就给你匹配出一堆无关紧要的东西。这时候还得手动加 -s 强制区分大小写,稍微有点打断心流。
另外提到 fzf,这俩简直是绝配!我之前一直觉得 vim 自带的搜索够用,直到试过 rg + fzf 这套组合拳,那种模糊匹配的快感真的回不去了。特别是当你记不清具体函数名,只记得大概有几个字母的时候,fzf 能瞬间把你拉进正确的上下文里。这比传统的 grep 强太多了,grep 是让你自己在一堆结果里大海捞针,而 rg+fzf 是直接帮你把针挑出来还顺便绣了朵花。
突然想到还有啊,你说它听 .gitignore 的话很温柔,这点我特别认同。以前用 find/grep 还得写一堆排除参数,什么 -not -path '*/node_modules/*',写得头疼。现在好了,只要 gitignore 里写了,rg 就乖乖绕道走,省心不少。不过也有个小bug要注意,如果你的项目结构特殊,有些不想被忽略的文件被误写进了 .gitignore,rg 就会彻底看不见它们,这时候就得用 --no-ignore 强行破防一下哈哈。
总之,从 grep 到 rg 这一步跨得太值了,不仅是快,更是一种体验上的降维打击。你们现在还用原生 grep 吗?我都快忘记那玩意儿怎么敲命令了