曾经有一段时间,编辑器领域的创新停滞了。在web编程走红,尤其是electron出现之后,这个领域又上了一个新台阶。Atom,VsCode等等替代了之前唯一的但是臃肿的跨平台选择 - Java。一时之间,大家都开始用网页来写代码了。
在这样一个时代,还要学Vim这种中古的技能吗?我来讨论一下为什么要,不但要,而且必须要。
- Vim仍然是最高效的编辑器
- Vim仍然在高速进化
- Vim是编辑器领域的Javascript
高效
Vim的学习曲线是出了名的高。但是这背后是高投入,高产出的效率。
随便举几个例子:dd
删除一行,两个键搞定。普通的编辑器可能要<HOME><Shift-End><Del><Del>
这样的组合才能搞定。w
可以跳过一个单词,普通的编辑器要<Ctrl-Right>
才可以搞定。一半的按键,还不包括远离中原的Ctrl
键。mM
记住一个位置,'M
随时跳转到该位置。一般的编辑器...说实在的我并不知道一般的编辑器如何做类似的操作。在VsCode的菜单里扫了两边也没找到。
这只是九牛一毛。而且用的时间越久,你积累的技巧就越多,你的效率就越高。
高效的另外一面是:反应快。其实要说功能强大,JetBrain的产品无疑都很牛。但是在大脑高速运转的时候,思维到屏幕上字符的转化过程减少2-300毫秒导致体验的差别是巨大的。就好像。。。。
其实Vim的高效很大程度上应该归功于所谓模式编辑 - Vim于大多数编辑器不同,有insert,
normal,
visual等等几个模式。这也是造成它学习成本高,被人吐槽多的原因。最近网上疯传的段子就是“如何退出Vim”。各种欢快的图片层出不穷。这里忍不住贴一个疯狂的图片。如果你看到这个图片决定不学Vim了,那是你的损失。反正我觉得这酷毕了。
进化
Vim 从Vi进化而来,为一个略显骨感的编辑引擎加入了诸多特性:
- 跨平台
- 语法高亮
- diff
- split
- plugin和vimscript....
在大约两年前,neovim出现了。它主要做了这么几件事:
- 将Vim的开发方式带入21世纪
- 加入async方式
- 远程控制
Vim的开发一直都是一个个人秀。当kernel已经从patch迁移到CVS迁移到bitlocker迁移到git的时候,当sourceforge已经经历了诺基亚式的巅峰到谷底的时候,Bram还基本停留在N年前的模式。当然,Vim首先是一个个人项目,无论怎么做都不过分。但单从技术进步的角度来讲,这确实是逆潮流的。
async看来是一件小事,但是却从根本上移除了用户体验的绊脚石。neovim出现之后,包括ALE等等在内的各种创新涌现了出来。甚至Vim8也不上了这个缺口。这个领域发展的速度一下子从步行编程了摩托车,出来一两个伟大的产品一点也不出奇。
远程控制用一种叫做msgpack的IPC将编辑核心和UI彻底分割了。方便了UI编写者。其中一个令人振奋的就是和VsCode的集成。
写这篇文章的时候,恰逢neovim最新的newsletter发出。有兴趣的可以戳这里看看。
Javascript
我在拿编程语言和一个编辑器做比较吗?我喝多了?
现在流行,甚至不怎么流行的编辑器或IDE,都支持插件。而在这些插件里面,总有一个插件是不会缺席的,那就是Vim。JetBrain有IdeaVim,VsCode有,Atom有,Sublime有,Chrome,Firefox也有,连Office都有,还收费! 这里面有一个逻辑,不是因为Vim很流行,而是Vim有意无意地创造了一种编辑的语言。比如dw,yy,g,gg
等等。这些快捷的命令在熟悉之后,不再是简单的命令而已,而成为可以组合的元素。你不会在思考用什么样的命令,而任由你的指头自行在键盘上跳动,进行它自己的编程。
学会了Vim之后,无论什么IDE,无论在什么平台上,都无需再学习另外一套键盘快捷。可谓一劳永逸。例如现在如日中天的VsCode,有非常多的快捷键,而且每个平台各有不同。但是只用安装一个Vim插件,这些快捷键都不用学了。
之所以和Javascript比,是因为:几乎所有的语言都可以transpile成Javascript; 几乎所有的编辑器和IDE,都支持Vim插件。
人生苦短,快学Vim!