老司机乱谈编辑器之神
前言
vim与神的编辑器emacs的争论从来没有停止过。其实两种编辑器的设计哲学完全不同,风格迥异。vim的特点是Composability,Emacs的特点是Extensibility。vim使用键序列输入,Emacs则经常使用组合键(同时按)输入,跟弹钢琴一样。所以Emacs有个绰号Esc + Meta + Alt + Ctrl + Shift。正因为各种显著的差异各种争论在所难免。而当你得证大道的时候你就会发现自己曾经的言论大部分是自己的臆想或偏见。《一代宗师》里有句话,习武的人有三个阶段,见自己,见天地,见众生。提高自己的格局,少一些争论,静能生慧。
目标
有人会问什么事vim能做emacs不能做?有,帮助乌干达的可怜儿童。这个梗当你启动vim的时候就明白了。好了,既然你已经启动了vim了就往下继续看吧。
磨刀不误砍柴工,如何达到人剑合一的高效呢?很多人觉得只是选择剑就行,但同样重要的是剑也会选择人。体会一下vim 如何选择使用者的,需要不断提高自己的的水平来适应剑,才能真正的人剑合一。另外需要注意,剑如果不用,钝的速度超乎想象。
有一天你所学的vim命令都成了过眼烟云,不复记忆。所有输入都跟条件反射一样自然,因为这些东西还藏在你的意识里。这时,你就会享受到思想通过指尖流出的畅快感,毫无滞涩,欲罢不能。时光荏苒,白驹过隙,你会发现已经将灵魂铸入了剑中。阳光明媚的午后,一杯清茶,清脆的键盘声,思绪如潮水般的从指间涌出,这正是一种生活的态度。
有人问我你究竟是哪里好
这么多年我还忘不了
春风再美也比不上你的笑
没见过你的人不会明了
法门
学习的方法有很多种,其实效率才是关键。什么努力就会成功之类的话那是流传多年的心灵毒汤。用学习英语来举例,有的人听voa学习英语,很努力但感觉进步很慢,其实VOA的生词大约10000出头了,对于很多人来说,直接阅读都是有一定的困难,如果只是听,那学习提高的效率非常低。上帝给每个人的时间都是一样的,效率低的就会淘汰,想要生存,就要拥抱变化,提高效率。
我们说说学习vim的过程,如果一上来先看一遍vim手册你会什么也没学到,比如光是模式,vim具有6种基本模式和5种派生模式。然后你就会留下一个印象,这个东西非常复杂,什么也没学会。就像是外行看看了一盘棋什么也没记住,但是高手看过之后基本全部记下了,可以复盘出来。我用自然选择的方法来学习vim,就是先用起来,如果想用什么功能就翻一下手册,当年基本使用熟练以后,整体的学习一下vim手册,你就会发现,很多东西一下子记住了,剩下没有记住的基本是你不需要的功能,因为每个人需要的功能都不完全一样,不需要掌握所有的功能,当你有一定的基础后,就可以自动识别出你需要的功能。总结一下学习过程,先用起来,最后再系统的学习。需要掌握的技能只有一个:查看vim手册。此外还有一些略为奇葩的学习方法,比如玩游戏,vim-adventures这个网站就是一个在线游戏,通过游戏让你学习vim,不过效果如何就没有试过了。
误区
很多人把vim配置成IDE的样子来用。其实vim和IDE完全是2个设计思想,无论用什么插件来模仿IDE也只是貌合神离,还不如直接用IDE。这是一种错误的使用方法,放弃这条路,回头一看海阔天空。千万不要让固有的思想束缚我们的想象力。
可能有人想要vim的配置,配置岂能尽如人意,关于配置每个人都不一样。spf13-vim这里有个vim插件和 配置的集成版本,可以用来学习体验。笋因落箨方成竹,当你蜕变之后就会形成自己的一系列配置和插件,就再也不会要别人的配置了。
寓繁于简,以简驭繁,千万不要在vim上装一大堆插件,大部分插件都不是你所需要的。插件上要做减法,能少用一个就少用一个,毕竟大部分人无法同时掌握太多的武功,当然有些仙风道骨的异士奇人。
启示
如何生成一个随机的值?random.org使用了大气噪声,其实让新手尝试退出vim就会生成随机的序列。这里只说一下最基本的操作,让你10分钟把vim用起来
启动退出
vim启动以后进入普通模式,按i,则进入插入模式,这时候vim就跟notepad一样了,输入完成后按esc回到普通模式,按:wq 完成保存退出(:表示输入命令,w表示write,q表示Quit)。为什么要有模式的概念?其实最简单的notepad都有模式的概念,键盘用来进行输入模式,鼠标用来进行命令模式。vim因为是全键盘,必须通过模式来区分,你输入的到底是文字还是命令。
输入命令
上图的应用需要一些时间,我们用自然语言的方式来理解一些简单的命令序列。
动词+修饰词(可选)+名词
d(delete)3w(word) 删除三个词
d(delete)5j(lines) 删除6行(包括当前行)
c(hange)w(word) 替换一个词
d(delete)t(till){ 删除直到{字符之前
d(delete)i(inside)p(paragraph) 删除一个段落
z(scroll)t(top) 当前光标行滚动到顶部
z(scroll)b(bottom) 当前光标行滚动到底部
注意只有一部分命令符合以上的规律,有很多其他的组合方式,例如直接的操作前面可以加数字修饰。
33G(Goto) 跳转到33行
6j(down) 光标下移6行
本文不是vim教程,所以这里只是举例,展示vim大概是个什么 样子的东西。具体的光标的移动,以及文字的增删查改,自己对照手册很快就可以学会。由于每个人的使用目的和使用习惯千差万别,所以每个人使用的命令也都完全不一样。
神功
以下主要以动画的方式演示一些常用插件的使用。
北冥神功YouCompleteMe /UltiSnips
这两个插件合起来真是双剑合璧对程序开发效率的提高起了极大的作用。YCM可以做到基于语义的补全、跳转,文件名补全,实时的出错提示。注意基于语义的补全是很强大的,得益于Apple的Clang。注:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。由于使用了Clang所以这个插件在离线安装模式下(因为开发机没有网络,或者Proxy不太好用)就复杂一点,需要先安装最新版本的GCC才能编译Clang,UltiSnips是一种snippets插件,可以跟YCM很好的结合,快速的做代码段层面的补全。这个很简单。
一阳指tagbar
这是一个用来查看函数列表的软件,并可以快速的定位,具体的使用配置可以看插件的帮助。以下的动画演示了函数的查找以及快速的跳转过程。
传音搜魂大法EasyGrep
超级快的文本搜索插件,可以最快速的在项目中搜索或替换字符串,堪称瑞士军刀。
这是一个重构的利器,实现了多光标操作的方法,类似sublime text的功能。可以实现普通查找和基于正则表达式的查找。
凌波微步 vim-air line
这是一款强大的状态栏增强工具且集成了buffer的管理功能,和很多插件也能集成起来,而且基于这个插件还有一些辅助的小工具,比如番茄时间管理等。很多图里面都出现了这个插件,下面给一个官网的截图。至于这个软件为什么叫airline是因为本插件的作者是在旅途的飞机上完成了这个插件的开发。
弹指神通ctrlP
文件查找利器。当然可以和NERDTree之类的插件配合起来使用。
斗转星移Matrix
周边的同事没见过我用这个插件,当然这个是从历史遗迹里翻出来的,不能说他没有用处。我们面向对象编程,不能没有对象,这个插件大大的提高了你屏幕的回头率,走桃花运的几率大大增加。
谨记,如果根基不稳,神功太多,后果不是走火入魔就是被反噬。
真气
剑有了,要做到以气御剑。当然这里是说键盘了,这又是一个百家争鸣的话题,我用的是全客制化的60%键盘。客制化是为了优化键位更加合适自己的使用习惯,选择60%是个人喜欢极简原则,多余的键都没有,只有主键区,手指基本不用移动太远。
键位方面主要对使用vim做了一些优化,如Esc和Ctrl键的调整,更方便频繁的使用,另外统一了windows下的方向键和vim的方向键,有些情况下比如插入模式也可以直接使用HJKL来控制方向。
关于键盘的适应性问题,人天然就有很强的适配性,我同时使用两种键位的键盘不会出现什么问题,当然有个较短暂的适应期。
键位图如下,所用的GH60固件其实可以支持很多层,比如玩游戏的专用层,这个看个人习惯了。
Jaco于2016年3月6日午后