前言
自从去年开始,我日常的工作环境基本都是在iTerm2+Tmux+Vim+Zsh中,这几大神器结合使用起来,能极大提升工作效率。从写代码,编译,debug,部署,维护服务器,都能在终端里面实现了,从此摆脱了对图形化IDE的依赖。为此,还专门写了一篇blog,分享如何使用这几个工具搭配,搭建属于自己的IDE:打造Go的IDE。
唯一美中不足的是Vim是运行在终端里面,感觉性能还是比不上MacVim,在代码文件较多的工程,会有一些卡顿,另外,也是因为我装了一堆插件的原因,各种的语法检查,自动补全,格式化代码等过程也会降低一些速度。直到关注到一个新的”坑”: NeoVim。
NeoVim
NeoVim,作者称它是Vim在这个新时代的重生,因为Vim的年纪确实有点大了,还是上个世纪90年代的作品。虽然这么多年过去,Vim仍然被许多开发者使用,但Vim本身已经由于自身包含大量遗留代码,程序的维护更新,bug的修复都已经变得越来越困难。NeoVim的作者也是因为当初向Vim提交了两大补丁,包含了大量改动,不幸被Vim的作者拒绝,认为风险太大。所以,NeoVim的作者干脆另起炉灶,开始开发NeoVim。
相比Vim,NeoVim的目标有几点:
- 通过简化维护以改进 Bug 修复及特性添加的速度;
- 分派各个开发人员的工作;
- 实现新的、现代化的用户界面,而不必修改核心源代码;
- 利用新的、基于协同进程的新插件架构改善扩展性,并支持使用任何语言编写插件;
迁移到NeoVim
从去年开始,我就关注到了NeoVim,不过一直没机会在工作环境中来使用,起初是担心NeoVim还在开发阶段,会有各种bug和不稳定,因为到现在NeoVim的版本都还是V0.1.X。其次是担心现在正在使用的各种Vim插件会有跟NeoVim不兼容的情况,因此迟迟没有把开发的主力编辑器从Vim迁移到NeoVim的打算。直到最近,终于大胆折腾了一下NeoVim,发现迁移的过程并不是那么“痛苦”,Vim的配置文件搬到NeoVim几乎没有太大改动就能用,而且插件也没发现不兼容的地方,于是乎,正式的把开发编辑器从Vim转到了NeoVim。
从迁移的结果来看,NeoVim用起来几乎跟之前的Vim差别不大,但是速度比Vim更快一些。此外,还在这次迁移过程中进行了一些调整,替换掉一些插件,让使用体验比之前更流畅了。
这里小记一下迁移过后的改动:
用YouCompleteMe替换掉了NeoComplete
Vim自带的补全工具是OnmiComplete,功能较弱。之前一直用NeoComplete,补全效果非常不错,唯一的缺点就是在项目文件比较多的情况下,容易出现卡顿,使用NeoComplete本身也需要Vim在编译的时候,打开lua的选项。这次在迁移的时候转向用YouCompleteMe,速度很快,基本不会出现卡顿。更方便的是,YouCompleteMe还支持Go,在安装的时候,添加–gocode-completer选项即可。替换之后,自动补全体验了有了很大的提升。
插件管理从Vundle换到了Vim-Plug
Vundle是之前Vim插件管理比较流行的工具。转向使用Vim-Plug,最大的原因还在于相比Vundle,所有的插件更新和安装都是并行的,这样比Vundle效率提升了不是一点半点。
此外,最令人心动的,是Vim-Plug的杀手级特性:按需加载控件,可以让你根据不同的需求,决定某些插件在什么时机开始加载,从而大大提升Vim/NeoVim的启动速度。例如:
1 | " 让NERDTree插件,在第一次被触发的时候才加载 |
最后
其他之前在Vim用的插件,都能无缝迁移到NeoVim,体验非常棒。NeoVim现在已经能完全应用到日常的开发环境中来替代Vim了。于是,我开始干了这样一件事情:
1 | brew uninstall vim --force |
然后,在.zshrc文件中,这样干:
1 | alias vi="nvim" |
嗯,算是彻底的弃Vim,入坑NeoVim了……
最后,更新了一下GitHub上的mydotfiles项目,把NeoVim的配置也放上去了,欢迎体验。