今天向大家分享一个我刚写的 Vim 插件 gfr.vim。名字取自三个词语缩写:Grep, Filter, Replace。顾名思义,这个插件提供的功能包括文本搜索、结果筛选以及文本替换功能。
为什么要开发 gfr.vim
Vim 文本搜索的插件已经非常多了,我自己也使用过很多种插件。比如:ack.vim
、ag.vim
、grepper.vim
等等。这些插件都提供了类似的功能,即为搜索制定的文字,并将结果输出到 Vim 的 quickfix window。
甚至,我之前还制作过一款实时异步搜索,并展示搜索结果的插件 flygrep.vim。
但是以上这些插件仅仅支持搜索指定文本的结果,不具备二次检索和替换的功能。
gfr.vim 的功能特点
异步执行
这个插件中,我比较常用的命令是 :Grep
。实际上,Vim 本身也有 :grep
和 :vimgrep
命令,功能是相同的,都是执行搜索命令,并且把搜索的结果展示在 quickfix 窗口内。
但是 Vim 自带的 :grep
和 :vimgrep
命令是单线程的,如果搜索的文件夹内内容非常多会卡住当前 Vim 的操作界面,体验不是很好。
兼容 Vim/Neovim
Vim 和 Neovim 的一些内置函数还是有些差异的,而 gfr.vim
集成了 SpaceVim 的 API,可以同时兼容 Vim 和 Neovim。
弹窗消息界面
gfr.vim
使用了 SpaceVim 的 notify API,对于一些插件通知消息,在 Vim 右上方使用浮窗提示。
如何安装
和其他常用插件一样,你可以使用任意一个插件管理器来安装,比如使用 plug.vim:
Plug 'wsdjeg/gfr.vim'
在插件列表添加上面这段即可,启动 Vim 后执行 :PlugInstall
。
如何使用
gfr.vim
提供了如下命令:
:Grep
: 搜索指定的文本,该命令后面的参数即为需要搜索的文本,比如:Grep hello
指的就是搜索hello
。如果直接调用:Grep
,并且不带任何参数,那么会弹出一个输入框,可供输入需要搜索的文本。:Filter
:检索上一次搜索的结果,可以理解为二次筛选。对于上一次搜索或者检索的结果,进行再一次的筛选。:GrepSave
:将当前的搜索结果保存至命名标签,以便于快速访问。:GrepResum
:使用:GrepResum 标签名
可以快速打开以往的搜索结果:Replace
:对搜索到的结果执行文本替换
后续计划
目前,这个插件只支持 grep
命令,后续计划增加 ag
、rg
等命令支持。