vim-searchme: 一键进行浏览器搜索


#1

站主说欢迎发帖,于是我就把我那没有技术含量的水文再发一遍了,活跃活跃论坛气氛~


作为一名工具控,我最喜欢的编辑器就是 Vim 了. 其操作快捷,扩展方便,与终端无缝贴合,可玩性极高。

断断续续用了一年多 Vim,我都是用着别人开发的许多插件,每当看到有人用插件在 Vim 里面实现许多奇葩的功能我都惊叹不已,不愧上古神器!

某日,我有了一个需求:我在用 Vim 浏览文件内容,突然遇到一个词,想要在浏览器里面搜索一下。然后我不假思索地敲下了命令 viw"*y把该词复制到系统剪切板,然后熟练地切换到浏览器, 按下 Ctrl T 打开一个新标签页,然后按下 Ctrl V 将该词粘贴进浏览器搜索栏并按 Enter 进行了搜索,最终如愿得到了我想要的内容。

等等,我是一名 Vimmer,我应该尝试用更 Vimmic(or other words? whatever) 的方式去完成,更好的操作应该是在 Vim 里面用快捷键直接触发浏览器搜索。这是每一个现代 IDE/Text Editor 都应该具有的功能,IntelliJ有,VSC有,Atom有(吗,没用过),Vim 也应该有! 虽然在 vimrc 里面写几行就能实现差不多的功能,但是我觉得内容也挺多,写在 vimrc 里面不便于管理,还是用插件好一点。于是我先去网上搜了一把,记得我找到过两三个,可惜都是四年前的写的了,作者们也都中断维护了。试了一下,都不能用。其中有一个在 Linux 上可以,但是在 Windows 上就不行。

既然如此,那就从头造个轮子吧。先明确需求(需求才是第一生产力):

  1. 要一键直达:在 Vim 里面一个快捷键就要触发浏览器搜索。

  2. 要可定制化:要有默认引擎,要能自己预定义搜索引擎。

  3. 要方便顺滑:要可以主动输入要搜索的词,要可以在 Visual 模式下直接选中搜索,如果是光标下的词既不用选中也不用输入而是直接搜。

  4. 要平台可跨:这个功能用于桌面电脑而非服务器(Linux版),所以要 Windows 可用。

这个需求实在是太简单了,实现起来也很简单,就是首先需要学一下 VimL,其次也是最重要的是要知道 Vim 对每个配置文件的加载方式。VimL 是个很简单的脚本语言,看看 Learn Vimscript the Hard Way 就差不多了。顺带一提,由于 VimL 是要对文本作操作的,所以这里面有一个比较绕的东西就是 VimL 中变量的命名空间,详情参考 What’s the difference between let and set? 可以看到 VimL 中有多达8种对应不同作用域的变量,使用时要搞懂再用,否则会经常出现 Undefined variable xxx 的情况。

时值暑假,闲散在家。经过几天折腾,我完成了我的第一个 Vim 插件vim-searchme(借鉴了 YouCompleteMe 的大名:),虽然现在看起来很简单,但是在写的过程中还是让作为 Vim 小白的我受了不少的曲折的。回到学校后我又优化了一下结构,加入了一些除 Google 之外的一些内置搜索引擎和命令。包括 Wolfram|Alpha(SearchInMMA) , GitHub(SearchInGitHub), StackOverflow(SearchInSO),Zhihu(SearchInZhihu)等。由于 Vim8 和 Neovim 出了异步特性,所以我又给插件增加了异步支持,解决了切换搜索时偶尔瞬间卡顿和 Vim 黑屏的问题。

地址在这:vim-searchme


vim-searchme 简单的功能暂时满足了我的需求,不过我还打算以后给它加一些的功能:

  1. 待决模式(operator-pending)的支持,结合 Vim 的 text-object 功能(据说是Vim独有的功能哦),体验应该会更顺畅。

  2. 能够识别 URL ,不要刻板,要更人性化。

不过我对这两个功能的需求不是很强烈,怕是要鸽一阵子了(_)。一个小小的脚本竟让我临时肝了这些的文字,因为实在是不想写作业 … 不说了我去复习机械设计了 :frowning: