我为什么选择 NeoVim
涛叔前几日读到 Geoff Greer 的一篇讨伐 vim 的文章,名为 Why Neovim is Better than Vim,火药味实足,不过说得也没什么毛病。我应该算是 neovim 比较早的用户。今天就说说自己的使用感受。
大家要知道,vim 在引入 +job
之前,所有的操作都是在主线程完成的。也就是说,如果你的插件在执行一个很慢的方法,在方法返回之前,vim 无法响应你的其他命令。你的 vim 会卡住。这个缺点对一个现代化的编辑器来说是致命的。
Geoff Greer 和 Thiago de Arruda 都试图给 vim 添加异步执行的功能。不管这些补丁的质量如何,最终结果是他们的补丁都被拒绝了。被拒之后,Thiago de Arruda 发起了 neovim 项目。
neovim 最吸引我的是它的异步任务特性和RPC系统。你可以使用任何语言为 neovim 开发插件。
neovim 取得了成功,vim 社区也受到了前所未有的挑战。所以 vim 社区重新实现了跟 neovim 相似的功能,具体有:
- 异步任务和 socket
- 内建 terminal
- 24 位真彩色支持
- 浮动窗口
我个人感觉 vim 成了一个追赶者,这应该是 vim 衰落的开始。
现在 vim 和 neovim 的区别已经很小了,vim 通过 job 和 socket 也能支持类似 neovim 的 rpc 特性。所以我对 phpcd.vim 做了改造,让它能够同时支持 neovim 和 vim。网上还有让 vim 支持 neovim 的 rpc 接口开源项目https://github.com/roxma/vim-hug-neovim-rpc。
除了引入新特性,neovim 对 vim 的代码做了大刀阔斧的改造,主要有:
- 移除一些老平台的支持代码
- 引入 libuv 处理跨平台逻辑
- 引入 CMake 编译系统
- 引入单元测试
这些改动大幅简化了 vim 的开发难度,所以有越来越多的开发者加入到了 neovim 社区。vim 社区对 neovim 的批评多为太激进、分裂社区。neovim 在最早的时候甚至砍掉了对 windows 的支持,确实激进了点。但我认为这是重构一个超过 20 年老系统的所必需经历的阵痛。
vim 是一个非常成功的项目,是一个非常优秀的工具。但过于悠久的历史也成了不小负担,而过去的辉煌也一定程度上成为了前进的枷锁。这导致 vim 社区过于保守,而且还有点自大。现在 neovim 和 vim 相互竞争,对两者应该都是一个好的事情。让我们试目以待吧。