vim, emacs or vscode?

本文章按照个人日常的需求整理三个编辑器对它们的支持,不会按照功能来整理。

本文章一个蛋疼的地方在于个人在很多地方的实践并不是最佳的。不过这三者, 自己都是使用过一段时间的,所以如果我个人没找到方案的话,也侧面说明了这个方案的一些问题 (自己使用 vscode 最短,可能就一两个月,但是我觉得 vscode 的定位就是不让人折腾, 所以我觉得这时间对它来说也是相对公平的)。

代码浏览

代码跳转

个人需要的代码跳转主要包含几个

  • 跳转到函数定义
  • 搜索字符串
  • 跳回
  • 找到类的另外一个方法

个人感觉 vim 的跳回是做的最好的,上述操作,它都支持跳回,快捷键也是统一的 Ctrl-o。 emacs 的跳回是比较蛋疼的, emacs: Jump to Previous Position - Xah emacs, 这里有总结一个方法,但感觉很难用。

其它方面,三者做得似乎都差不多。

代码折叠

vscode 的折叠显示和操作都非常的清晰简单。vscode 会有缩进的 hint,折叠似乎是按照缩进来实现的, 通过鼠标点击可以方便折叠,折叠之后在左侧会有明显的标记。

vim 的折叠操作也算方便,但记忆中不是很鲁棒。

分屏

emacs/vim 相对都比较好。vscode 比较弱,vscode 分屏后太耗空间了。

代码搜索

vscode 略胜一筹,会展示全局视角,比如 vscode 会展示总共有多少,当前是匹配的第几个; 右边滚动条会显示匹配的字符串在哪个位置。emacs/vim 可以一键搜索光标下的单词。

当前上下文指示

  • vscode 顶部有面包屑来指定当前所在 函数 / markdown 标题。
  • vscode 右边的滚动条可以指定当前所在文件的位置(emacs 的滚动条也太丑了)

outline

vscode 的 outline 会把类名和函数名显示在一行,基本没有可读性;这个点上 vim 和 emacs 都做的比较好。 但是 vim 和 emacs 的 outline 都不能很自然的跟随文件变化而变化,这个点 emacs 最差。

代码编辑

自动补全

vscode 默认不能对 buffer 内的单词进行补全,个人非常不习惯。 vim 可以方便的补全一行,感觉略胜于 emacs。

自动对齐

emacs 可以通过 tab 来自动对齐一行,一开始用的时候觉得不习惯,现在还真有的离不开。

最近打开的文件

vscode 要打开一个文件比较蛋疼。如果有一个最近打开的文件列表应该会比较好, 目前只有 emacs 有,但和其它功能结合的不是很好。

中英文切换问题

vim 模式都没有很好的处理这个问题

与终端的集成

对个人而言,vim 一般是 tmux + vim + terminal,所以不要求 vim 提供终端功能。 emacs 和 vscode 都希望用户在里面完成所有操作。

(个人感觉) vscode 提供的 terminal 和原生的 terminal(比如 iterm/tilix/konsole) 等功能更接近。但我理解 vscode 是希望用户使用这个 terminal 来做一些简单的操作。 所以 vscode 把 terminal 看成一个辅助窗口,默认也没有提供快捷键让该窗口最大化。

emacs 中的 term 的话,由于它和 emacs 是高度集成的,emacs 的快捷键优先级也是高于 term 的, 所以个人不是特别习惯。加之个人工作流程重度依赖 tmux,所以 emacs 的 term 个人很难适应。

多机器配置同步

vim 和 eamcs 都可以通过 GitHub repo 来同步配置,vim 甚至可以只用一个 vimrc 文件。 vscode 新功能可以在云端同步,似乎不是通过文本的形式。个人更喜欢 vim/eamcs 的方式。

流畅度(考虑生态组件)

emacs 在使用 lsp-mode 的时候,遇到大的项目经常会卡,连移动光标都会卡, 比如 golang。vscode 也有类似的问题,编辑 feeluown 项目都会卡,醉了。 这在 emacs 的使用过程中,很少遇到。vim 在补全的时候会卡,没有尝试过 vim lsp 类似的东西。

解决未知问题的难度

这里举几个例子比较适合:

vscode:我打开 tikv 项目,发现 language server 似乎没有启动(不能 jump to definition), 于是我想启动它。找了一圈,发现只有一个命令 Go: Restart Language Server 与其相关, 我尝试了,但是遇到这个问题错误:https://github.com/rust-lang/vscode-rust/issues/594。 emmm,我认为这个点上,vscode 做的挺差的。

小结

当我把代码 “浏览和编辑” 分成两件事的时候,我似乎对三个编辑器有了比较明确的认识

  • emacs 在编辑上比较大的领先 vim/vscode;另外,个人认为 emacs 的插件实现起来比较简洁
  • vscode 在代码浏览上体验优于其它两者
  • vim 有比较完整的终端工作流,emacs 和 vscode 都需要额外的终端来配合

Updated:

Comments