Vim 不止是一个编辑器

当我们谈论起Vim的时候, 我们谈论的其实并不是某一种编辑器, 我们更多的是谈论模式分离,

编辑器的学习曲线, Vim的曲线是到达某一高度后, 就开始水平了, 我认为这个高度其实是你 习惯了文本模式与命令模式, 并且为了操作某些文本, 能够灵活的运用这两种模式.

GVim带给了我什么

由于这篇文章讨论的是转向VSCode, 所以原始的编辑器, 我想以GVim为例, 这是我平时工作中 用到最多的GUI编辑工具. 这节先来讲一下, GVim带给了我什么.

完整的Vim操作体验

在GVim中, Vim的所有基础操作都可以做, 另外还有, 强大的搜索替换, 缓冲区, 分屏以及多标签, 宏的录制.. 这部分操作, 几乎涵盖了所有的我能想到的在编辑器该有的功能. 上面的功能甚至都不需要完全用到, 你都可以足够快的完成你的文件编辑操作了.

简易的插件管理

Vim或是GVim基本上可以共用一套插件系统, 我们甚至也可以把这部分配置整理成dotfiles加入 到版本控制中, 更可以分享给别人使用, 类似SpaceVim这样的辅助工具.

我在需要Ultisnips插件时, 可以在配置中直接增加一句Plug 'SirVer/ultisnips', 稍后直接安装即可.

轻量稳定

我在使用GVim时, 崩溃的次数真的是少之又少, 你几乎完全不需要考虑文本丢失. 同时, 安装少了的插件并不会太影响性能, 这也是我一直将其作为轻量编辑器使用的原因.

自定义的一些脚本(vimwiki)

Vimwiki是我用自己的wiki管理工具, 我用它来写周报, 日记, 甚至每日的草稿, vimwiki 也支持了markdown, 如果没有图片需求, 它是一个极好的日记软件, 可以快速的新建当天的 文档, 配置UltiSnips, 可以快速产生结构, 下面一张图是我的日记以及周报的编写.

Vim不能带给我什么

补全插件…

我之前就开始使用YouCompleteMe, 随后又在朋友的推荐下使用了coc. 恕我直言, 如果你 真的愿意花很多时间去调试这两个工具. 那么他们两个补全效果应该也是极高的. 并且, 你甚至能 在深入调试过程中, 例如Python这样的解释型语言, 你可以观察或是学习一下jedi的实现.

不过这个过程真的很花时间, 令我有一种挫败感, 毕竟我不是专业做编译器或是调试器的, 我真的只想用来补全代码.

多语言支持

Vim中, 其实内置了许多语言的语法, 我担心的并不是高亮问题, 而是只有高亮, 比如puppet, 这个是我工作中接触到比较多的一种语言, 它有自己的语法, 并且还有简单的流处理, 我真的很希望稍微有多一点的补全出来, 抑或是能够加强跳转功能, 在Vim中也许可以实现, 但应该也要花费很多时间了.

UltiSnips的候选词无法显示

这个应该是我个人配置的问题, 我不明白Ultisnips的候选词为什么不显示, 就像这样:

,

这个问题, 绝对是压弯骆驼的最后一根稻草, 我苦心配置了许久, 仍然未能向原仓库中那样 显示候选词.

VSCode帮助我解决了哪些问题

当我在切换编辑器时, 并不是因为VSCode很酷, 它确实很酷, 但也没有到我一定要用的地步. 当我在Vim中遇到的问题, 我可以部分的在VSCode中解决时, 我会将这部分工作迁移过去.

补全

  • C++,Python, Golang的语言支持

作为阅读工具, VSCode真的很适合C++或是Python程序的阅读, 语法高亮自不必说, 还有官方的 插件支持. 几乎无需配置, 小型的C++项目基本都可以实现查找跳转.

不过, 如果是要我开发C++程序, 我依旧会毫不犹豫的选择题QtCreator这种IDE, 你可以获得完美的体验.

但对于Python程序的开发, 这也是我工作中使用最多的语言, 基础的跳转功能, 以及补全已经 完全足够了. 我基本上不会使用VSCode设置断点调试Python程序. 很多情况下, tornado自动 重新载入程序, IPython打开交互式shell, 就已经足够了, VSCode的调试功能, 让我看着 十分揪心, 如果有哪天我一定要为Python程序打个断点, 那也会考虑使用PyCharm, 而不是 作为编辑器的VSCode.

Golang的话, 由于gocode这样的工具在, 无论是Vim还是VSCode的补全效果是一样的, 不过在VSCode中候选词显示的视觉效果更好.

  • 其他语言

对于其他语言, 我最近试用了一下TabNine, 我很喜欢这个智能的补全工具. 在编写puppet脚本时, 偶尔也能帮上忙.

插件编写

曾经我在VSCode中一直没有找到UltiSnips的对应的插件, 在VSCode中产生代码片段时很不方便, 后来自己决定去写一个, 使用JavaScript或是TypeScript编写插件的感觉良好, 就有了现在这个工具: Vsnips代码片段, 虽然我还不能保证所有的UltiSnips的代码片段全都兼容, 不过也应该可以定制大量的片段来简化操作了. 同时, 作为普通用户你也可以使用, 并不不需要一定开启Vim插件.

VSCode remote模式

我不知道有多少朋友和我一样, 是因为自己的笔记本性能太差, 所以远程连接到一台性能较好的 机器中使用, 这个时候, VSCode就像是一个代码浏览器. 所有的补全, 提醒操作均由远程服务器 运算完成, 不需要占用本地资源. 对我的小破笔记本来说, 简直就像是重获新生.

VSCode无法满足的需求

上文已经降到了, 我不喜欢VSCode中的调试功能, 尤其是针对编译型语言(C++, Java), 即使设置了断点, 我也认为很痛苦, 还不如直接使用IDE.

对于解释型语言, 例如Python, JavaScript, 我几乎很少去设置断点, 这些语言你要把单元测试 写好才行.

我是如何切换使用这两种编辑器的

平时的阅读代码, 以及Python, Golang, NodeJS项目的编辑, 我会考虑使用VSCode. 对于我的日记,周报的编写, 就如上文中所说, 我已经在Vim中编写了合适的脚本, 并且熟悉了快捷键, 没有必要一定要统一到VSCode.