就在几个小时以前,我回答了一个关于推荐开发工具的问题,很多朋友表示喜欢和鼓励,非常感谢!我也很想多写一些细节,于是便起意开一个系列来聊聊我多次提到的 Vim。
这将是一个 Vim 的教学性质的系列,但是和绝大多数同类教程不同的是,我的重点不在于技巧的传授,而是在于对其观念的理解和阐述。Vim 之所以能卓尔不群靠地就是一种自成一派且精悍有效的“编辑器哲学”(当然 Emacs 也是),就好像网游千千万却唯有 World of Warcraft 一览众山小,那靠地不是技巧与外在,而是与众不同的世界观。这个世界和这个时代,很多东西都能博人眼球,令人叫绝,但唯有那些体现出独特价值观的人或事物才能在人们心里留下难以磨灭的印记。
如何学习 Vim?
我首先来讲讲宏观上的心得体会:如何学习 Vim?这个问题的背后其实隐含着很多诉求,比如:
- 我很懒,不想看厚厚的文档,不想学习无穷无尽的命令、脚本、配置选项……我就想要能够快速上手,在最短时间里成为高手。
- 我很笨,我根本记不住那么多的模式和命令组合,我也永远无法适应古怪的功能键位,我只想“所见即所得”,点点鼠标就可以完成所有的操作。
- 我很烦,我要这要那,我要 debugger,我要 refactor,我要 auto-complete……一句话,我要 Out of box!(开箱即用,应有尽有)但是,谁能告诉我怎么自定义代码匹配的片断啊?谁能告诉我怎么定义语法检查的范围啊?谁能告诉我怎么换字体和颜色主题啊?
- ……等等
我理解,我都能理解。现在我不会批判,未来我会逐一解答,请稍安勿躁。其实在我身上发生的故事就很有代表性,从我接触 Vim 到现在足足超过两年时间,在此期间我无数次鼓起勇气想要征服这个巨兽,却也同样多次的短短几天就败下阵来(令人欣慰的是这些打击倒是让我重新认识了许多别的编辑器);也试图偷懒直接使用其他人的 .vimrc
或者集成安装包,但每次都是好景不长,一旦遇到想要微调的时候就抓狂不已了……
说真的我不止一次想过,或许我一辈子都没法真正学会 Vim,但是内心坦白地说:我对自己很失望。
我不想把这篇文字变水,所以内心独白就省略了。真正的关键在于一年半以后,也就是距今半年以前,一个人改变了我对于学习 Vim 这件事情的态度,或者说他刺激了我让我有了新的动力和方法,我为自己制定了计划并依次施行,终于成功地征服了它。
征服,不是指我无敌了,而是说我对这个工具已经没有任何使用障碍了,即使我还有很多不了解的东西,我也知道如何去应对和掌握它们,剩下的只是时间问题。征服其实是一种领悟,我融入了 Vim 的哲学而已。
我之所以要说这些就是想告诉你们,学习 Vim 并不困难,不需要你多么天才,也不需要你多么努力。你只需要一个想要用它的意愿和一条忠恳的建议——也就是那个人教会我的:保持简单(Keep it simple enough)。
这就是全部的秘诀。唯一阻碍你学会 Vim 的原因就是你总是把它想的太复杂,所以从一开始请放轻松,接下来我会与你分享几乎所有的细节,你一定不会让自己感到失望的!
另外,为了客观证明我不是吹牛逼(比如抄别人的教学帖子来博名望),也为了给你树立一点信心(我的确知道如何学好 Vim),贴上我刚完成的 Smaterer 测验分数:
其实这个测试不算最难的,满分 800,很遗憾我就差一步到 Master 级别,不过我已经很高兴了。半年而已,我没有白费功夫(而且不是天天像读书考试那样的学,很轻松很愉悦),我相信你一定可以学得更快更好。
第一关:基本移动
如果有些事是不得不去忍受的,那就去寻找享受它的办法。
我这人不算聪明,但贵在有自知之明,有一套非常适合自己的学习方法,所以只要是我想学的就没有学不会的(但不会像天才那样迅速)。经过长达一年半挫折体验的磨砺,我开始修正自己的学习方式,以下是第一阶段的总结。
有些东西是基础中的基础,永远也摆脱不了,Vim 也不外如此。我们无法逃避这个过程,但却可以选择接受它的方式。
Vim 的基本移动就是 h
j
k
l
这四个键,分别代表 左
下
上
右
。很特别是吗?好吧,我承认是很古怪。然而你必须要习惯它们,并且永远不要更改它们的键位!因为这是 Vim 的哲学:
这些键位的存在固然有其历史原因,但更重要的是以下两点:
1. 摆脱对视觉控制的依赖。也就是摆脱使用鼠标等可视化辅助工具来进行光标定位的习惯。人的大脑是很有趣的,逻辑思维和形象思维分别由左右脑来控制,对于常写代码的人来说,保持逻辑思考的专注性非常重要,而不停的使用鼠标指针在屏幕上找来找去无疑会降低这方面的效率。
2. 这四个键在右手标准键位附近,对于移动手指产生的消耗最少。
你应该领会这个意图:保持简单。
可是真正的问题在于习惯真的很难改变,这种移动方式难倒了不少初学者,所以我选择了一些更有趣味的方式。我认为这种改变实际上是在锻炼我们接受新的交互方式,而学习交互的最理想方式无疑是寓教于乐,也就是玩游戏。就连设计软件应用也是一样的道理,如果你的应用里与一些非常规的或者复杂的操作,你总会设计一些互动性很强,很友好的引导教学。Github 为了推广 Git 是怎么做的?他们联合 Code School 录了两套非常棒的视频,其中还包含在线的模拟终端操作!
而对于 Vim,我给你四条建议:
- Vim Adventures 这是一款在线游戏,玩法超级简单,控制键都是 Vim 的移动指令。你所要做的就是把键盘当成手柄,移动一个阴影来寻找字母、人物、宝藏、钥匙等等。如果你无法过关也没有关系,重要的是控制方向这个环节能够把它练习到无需思考且不会犯错就可以了。
-
Vim Snake 如果你觉得上一个游戏有点难,因为无法过关让你有挫折感的话,这个游戏就简单多了——贪吃蛇,谁不会玩?只不过你只能用
h
j
k
l
来控制方向而已。注意,只有在插入模式(i
)才能吃到东西,只有在常规模式(ESC
)才能移动方向。完整的流程如下:移动 -> 对准目标 -> 按下i
直到吃到目标 -> 迅速按下ESC
-> 移动。关于模式,我们下次解释。 - Open Vim Tutorials 如果以上两款游戏都让你为难的话(喂,你不是吧?!),那么这就是你的救星啦。请直接跳到第三章练习四方向移动,等到开始习惯这种感觉了再继续挑战游戏。
- Vim Genius 这也是好东西,它比上一个更贴近 Vim 的哲学。它不让你看到要按哪个键,而是给你文字提示让你盲打对应的键,其好处是锻炼自己的肌肉记忆和条件反射思维。然而它比较依靠你的自控能力与耐心,另外英文不好也会有点拖累。
实际上,以上四款推荐都不是单纯的上下左右练习,哪怕是操控最简单的也会有其他键位的练习混杂其中。但是这个阶段的目标只是征服上下左右而已,我的建议是保持注意力在这个目标上,保持简单。
我在这些游戏和互动式教程身上花费了一个多月的时间,每天平均在 20 分钟左右(也就是 10 个小时),我说过我不算聪明人吧?当然我也没有那么笨啦,主要还是因为我真的喜欢玩游戏,喜欢挑战自己的极限。不过我真正想说的是,不要着急!没有人期待你三天拿下 Vim,你着急给谁看呀!我建议你学 Vim 不代表我认为其他编辑器/IDE 就是一坨屎,你可以继续使用别的工具来保持工作和学习的效率,只是 Vim 是值得一学的,而且是有点难度的东西,你能够保持抽点时间来练习一下就很不错了。
在下一阶段我还会继续解释为什么要保持简单,继续分享我对 Vim 哲学的感受,另外我们还将了解到非常重要的——模式(Modes)。记住,保持简单,保持期待。
尾记:上文中提到了“一个人”,那个改变了我对 Vim 认识的人,他叫 Gary Bernhardt,他曾经录制了一套非常棒的教学视频系列,不过不是专门针对 Vim 的,主要话题涉及重构、程序设计、测试驱动开发、工具使用技巧等等,涉及到的语言主要是 Ruby Python 和 Shell Script。曾经这些视频很便宜,9美刀/月,我有幸在那时全部获得(总共就花了这么多,赶上恰当的时间,一个月内全部下完了)。遗憾的是他现在的注意力放在了别的事情上,已经不再录制视频了(Twitter 上好多人强烈呼吁他继续,结果他连 Twitter 都不玩了——当然,不是因为这个原因),而过往的视频都打包分成四部分单独出售,总售价不菲。然而,如果你不差钱的话,我依然建议你买来看一看,不单单是因为 Vim!事实上在那些视频里他专门讲解 Vim 的时间非常少,但是所有的操作都是在 Vim 里即时完成的,如果你看了就会知道那是一种什么感觉,什么叫做如臂使指,什么叫做随心所欲。虽然他肯定不是独一无二的高手,也不一定是最强悍的一个,但是我希望我能达到这个水平就非常非常满足了。你看,这个世界上总有一些人一些事会在不经意之间改变你的观念,在一个采访他的视频里有人问道:你是如何把 Vim 用的如此好的?他回答:保持简单。我的理解是,高手口中的保持简单,背后蕴含着无数的探索和尝试,然而这不是困难,真正的困难是你无法理解和保持这种简单的目标。当你费尽心思想要打造最强编辑器,结果还是不能达到你的理想状态然后不得不放弃的时候,你已经背离了 Vim 的哲学。这个系列,虽然讲的是 Vim,但我希望能够表述出我的感悟,并且让读者能感受到我当初的感受,而我相信所谓“Vim的哲学”也一定能够帮助你在其他任何领域找到共通之处,这才是学习 Vim 的最终价值和意义吧!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。