在 vim 中,如何把 grep 结果像 emacs 一样导出到某个 buffer ? (或者改变全局的 quickfix 机制?)

我非常喜欢用 emacs 导航代码,其可以把 rg 的信息保存到一个 buffer,配合 grep-mode,可以同时为不同的 projectile 都分类保存多个 grep mode buffer . (其余的筛选, 添加笔记等等功能太多了…

我在终端时喜欢用轻量级的 vim,但是 vim 的 quickfix 窗口不能让我满足,他是一种全局基础设施,这很不方便。例如,多次 grep 后, quickfix 窗口只有一个,旧的会被刷新,只好前后 colder/cnewer。特别是当你要管理多个项目时更加糟糕,不同的项目都刷新在同一个 quickfix 中,相互覆盖,当你切回到一个很久没有使用的项目时,发现 quickfix 窗口被其他项目覆盖了很多层,你只好一层层往回翻。

所以想请教下有没有熟悉 vim 的大佬,有没有办法让 vim quickfix 变得像 emacs 的 grep buffer 一样工作 ?

最起码,全局不再唯一,可以同时存在多个 quickfix buffer ,分类不同 project。如果可以修改保存为文件,重新加载就更妙了。

看看 :h location-list 是你想要的?

至于保存重载可以用 get/setqf(loc)list 函数,也可能有相关插件。

如果不是跨 session 重载的话,简单 let myqf = getqflist() 即可,省得麻烦读取文件。

1 个赞

试用后,感觉 location-list 还是挺麻烦的,我还是用回了全局的 quickfix …

loclist 确实用的很少。

vim/nvim 记录了最近 10 次 quickfix,加上我上面提到的命名 quickfix,够用了。跨 session 读取 quickfix 我没需求。保持事情简单就好。

一个不够用吗,有locallist,而且quickfix也可以看历史

telescope可以放到你想要的地方

用终端下的 Emacs? 可以用 display-graphic-p 这个函数判断是否启动了 TUI,然后去掉很多 GUI 的东西,这样在终端下既保证了轻量,又能继续用你喜欢的 grep-mode 这一套。

你指的是 :global/regex/print 吗?