周三下午三点,一个程序员删掉了Telescope的配置文件。不是插件不好用,是他发现Neovim自带的搜索工具已经足够强悍——而且零依赖、零延迟、零配置焦虑。

这篇文章只讲一件事:如何把Neovim内置的grep和文件搜索用顺手,彻底告别"装插件才能干活"的思维定式。

打开网易新闻 查看精彩图片

先看你的搜索后端。在Neovim里输入:set grepprg?,大部分现代发行版会返回grepprg=rg --vimgrep -uu。这说明Neovim已经默认调用ripgrep(rg)作为搜索引擎,无需额外配置。

但默认配置可以优化。推荐在init.lua里写:

vim.opt.grepprg = "rg --vimgrep --smart-case --hidden"

三个关键参数:--vimgrep让输出格式兼容quickfix列表;--smart-case实现智能大小写(输入全小写则忽略大小写,含大写则精确匹配);--hidden把隐藏文件也纳入搜索范围。

实际项目中还要排除垃圾目录。完整的生产环境配置长这样:

vim.opt.grepprg =
"rg --vimgrep --smart-case --hidden " ..
"--glob '!node_modules' " ..
"--glob '!.git' " ..
"--glob '!dist' " ..
"--glob '!build'"

搜索用法极简::grep pattern。比如找所有useState调用,直接:grep useState。Neovim会在当前工作目录递归搜索,结果自动写入quickfix列表。

打开结果列表用:copen,关闭用:cclose。在结果间跳转::cnext下一个,:cprev上一个,:cfirst回顶部,:clast去底部。

quickfix的真正威力在于批量操作。比如把项目里所有console.log换成logger.info

:grep console.log
:cdo s/console.log/logger.info/g | update

第一行收集目标,第二行对所有匹配文件执行替换并保存。:cdo是"change do"的缩写,管道符后的update强制写入磁盘。这是Neovim最被低估的批量重构工具,比任何IDE的重构功能都直接。

给grep绑个快捷键更顺手:

vim.keymap.set("n", "g", function()
vim.cmd("silent grep! " .. vim.fn.input("Grep > "))
vim.cmd("copen")
end)

这个映射做了三件事:弹出输入框询问搜索词、静默执行避免跳转到首个结果、自动打开quickfix。按g,输入关键词,回车,结果直接呈现在眼前。

文件搜索同样原生支持。:find filename按名称定位文件,配合:set path+=**可以递归子目录。更实用的组合是:e **/filename,利用通配符补全快速打开深层文件。

过滤quickfix结果也有内置方案。:Cfilter keyword只保留含特定词的条目,支持正则。比如先grep出所有测试文件,再用:Cfilter "describe\|it"精确定位测试用例。

为什么坚持原生工具?三个现实考量:启动速度(无插件加载开销)、环境一致性(服务器/容器里即开即用)、认知负担(一套逻辑贯穿所有场景)。Telescope和fzf.nvim确实更美观,但当你ssh到生产服务器修bug时,:grep和quickfix是唯一确定可用的选项。

最后放一张核心逻辑图:搜索请求→ripgrep执行→结果进quickfix→:cdo批量处理。这条链路从Neovim 0.1到0.10从未改变,学会一次,受益十年。

删掉插件配置的那个程序员,后来把省下来的时间用来写业务代码了。他的init.lua只剩47行,其中8行是搜索相关。有时候,少即是多。