总看到一些飞快敲击键盘而不用鼠标的时候你可以很羡慕和佩服,其实这完全没有必要。就像一个吉他手熟练地弹吉他有必要羡慕吗?一个瓦匠熟练地砌砖有必要羡慕吗?这些都是他们赖以生存的工具而已,熟练地运用工具是理所当然的事情。而一个程序员,一个文本编辑者,你如果没有熟练运用你的编辑工具,其实还是挺不应该的,而工具又有优劣之分,选对工具很重要。编辑器有Sublime、Notepad++、EditPlus、Visual Studio Code,以及号称21世纪编辑器的Atom,这些编辑器都很好用,用户基础都很多,而且可以满足日常几乎所有的需求,而vim相对他们一个很突出的特点就是难用,下面Michael Mrozek画的一副比较“写实”的各个编辑器学习曲线图:
作为“编辑器之神”的vim,想驾驭它可不是简单的事情,需要不断地学习然后放弃、再学习、再放弃,说的好像很恐怖,其实我我相信你看这篇文章的时候可能已经放弃了不止一次了吧:D 所以从现在开始你将真正走入vim的神殿,接近并驾驭它。众多的编辑器之中,作为“神之编辑器”——emacs是vim的最强竞争者。两个都很难学,我为啥学vim而不是emacs呢?由于我从vim入门,那时没有听说emacs,也无法体会她真正的魅力,那时的网上也没有这么激烈的争论吧。也许,我从emacs开始,可能就是是emacser了吧。不对,我想,以我的性格,最终的结果甚至都是偏向于vim这一方的,两者最大的不同是理念不一样。理念就是一个骑自行车爱好者,听到自行车的优点就会两眼放光,说到汽车的优点就敷衍了事,凡事皆如此。而网上的负面评论都是不熟悉vim或emacs的用户胡乱评论的,总存在以偏概全,胡搅蛮缠,甚至有点胡说八道了,我每条都可以驳斥,但是没有那么多时间,但是这些小丑觉得无人反驳,就觉得自己说的很对。比如有些人拿一方的优点来贬低另一方的“缺点”:
个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dw,dw,dw,。。。,按N次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便之极。
这是很明显的不懂vim,vim中可以各种删除方式,如果照上边说的,如果要删除一篇10万字的文章,难道按着M-d,要按着Alt不放,按100000次的d,我觉得最好的机械键盘的按键也报废了,这也太贵了。用vim直接用gg ddG就可以,你的机械键盘还是全新的呢。难道就着一个就全面否决emacs吗,肯定不能,作为vim最强大的对手,把emacs贬低的越利害,其实也在贬低vim啊。其实,主要是emacs的理念是可以用它来干任何事情,而vim则希望用户只用vim来高效编辑器。emacs的重度用户陷在其中无法自吧,vim却是不改初衷,高效编辑着,从理念上来看,emacs似乎是不务正业,vim的理念才更符合unix的哲学,一个工具只做一件事情,并且做到极致。我选择了vim,成了vimer。两者的战争已经打了几十年,并将一直持续下去,其实打口水战没必要,两个都是神,所以两个存在肯定都是有道理的,更何况emacs其实有个evil模式,可以让你在emacs上使用vim的快捷操作,从侧面说明vim的编辑方式还是得到了对手的认可的,两者终于找到了和谐共处的方法,如果你哪天真的要叛逃emacs,那你将拥有神之编辑器之神。下面我着重给出点成为vimer的理由,毕竟我们大多数小老百姓并不需要去利用编辑器发邮件发twitter什么的。
1. 编辑文本效率高
编辑器的作用是处理文本,文本的操作主要有输入、光标移动、删除、以及复制粘贴等,vim对每种操作都有很多种的操作方式,可以很慢可以很快。比如光标的移动,vim可以以单个字符移动,可以以一个单词移动,可以以一篇文章移动,可以以不可思议的方式移动,几乎能跟上你的思维移动,目前为止,没有看到哪个编辑器这么利害。vim比一般的编辑器快上许多,用编辑器打开一个10M的代码,再来说vim慢的我才服气你。我分析android源码时,有近20G的源代码,vim+ctags建立好索引后,代码跳转几乎没有延迟。没听说哪个IDE能做到的。vim的所有功能都是围绕这文本编辑,所以vim的复制粘贴功能也强大到令人发指,相信我,学好vim将显著提升你编码的效率。
2.完美跨平台,跨各种IDE
如果你想把vim打造成c/c++/python甚至java的IDE,完全没有问题,再怎么配置也不可能超越IDE吧。不要忘了,vim只是编辑器,如果能够用Android Studio或者Pycharm的快捷键配合上vim作编辑不是更好?事实证明这是可行的,很多ide都提供对vim的编辑支持,而且几乎所有的编辑器或者IDE都有vim插件,还是很不错的,只是我觉得不太习惯,不用在linux上没有你心爱的notepad++,也不用担心从android转行ios在编辑方式上的巨大改变了,学会了vim,在不同平台上,不同编辑器或者IDE里面,一个vim走天下。vim是一个跨平台的编辑器。
3.远程无图形编辑
linux系统大部分都内置了vi编辑器,一个不到120k的编辑器,速度不错,功能就够用了。作为vi的拓展vim,每个linuxer都应该学学,我想只要搞开发应该是逃不过远程访问一些日志或者修改一些配置参数什么的,无法图形操作,此时正是vim的技能就派上用场的时候,如果只知道i和:wq就ok了,那也是没有问题,毕竟很多人开始都是这么干的,包括我也是,当你学会各种方式流利移动光标之后就想要好好学习vim了。
4.扩展性强,可订制性强
vim虽然已经很强大,对个人的特殊的需求不能尽善尽美,可以通过自学vimscript来自己写脚本,实现私人订制。不学vimscript的话,学python也行,但是基本的vimscript还是要掌握的。更懒的可以去baidu或者github,也许你需要的功能需求没准别人已经写好了插件,直接拿来用就行了。我自学了vimscript,学的不好,感觉vim不顺手就自己写个小脚本来实现。下面就是我的实现的,新建不同的程序文件,自动添加文件信息。
5.启动特别快
就像武侠小说说的,天下武功唯快不破。编辑器快是必须条件,又快又能跨平台,有可以自己定制,又符合unux哲学的,似乎只剩下vim了。无论是用来打开修改一些配置文件以及编辑文本很高效的。还是编辑C代码,还是python代码,还是shell脚本,vim足够了。如果你需要一个用了十年和第一年一样的编辑器,notepad觉得是你该选的,如果你需要一个用了十年有了巨大变化的编辑器,选择vim吧,十年后的你再用vim一定是非常顺溜,vim也在你的生命中留下一个痕迹了。还在等什么呢,深入了解一下vim,也许你发现以前的码字还有很大的改善空间,希望一起学习,把vimmer的精神发扬光大,让vim成为你最后的编辑器。