就在几个小时以前,我回答了一个关于推荐开发工具的问题,很多朋友表示喜欢和鼓励,非常感谢!我也很想多写一些细节,于是便起意开一个系列来聊聊我多次提到的 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,我给你四条建议:

  1. Vim Adventures 这是一款在线游戏,玩法超级简单,控制键都是 Vim 的移动指令。你所要做的就是把键盘当成手柄,移动一个阴影来寻找字母、人物、宝藏、钥匙等等。如果你无法过关也没有关系,重要的是控制方向这个环节能够把它练习到无需思考且不会犯错就可以了。
  2. Vim Snake 如果你觉得上一个游戏有点难,因为无法过关让你有挫折感的话,这个游戏就简单多了——贪吃蛇,谁不会玩?只不过你只能用 h j k l 来控制方向而已。注意,只有在插入模式(i)才能吃到东西,只有在常规模式(ESC)才能移动方向。完整的流程如下:移动 -> 对准目标 -> 按下 i 直到吃到目标 -> 迅速按下 ESC -> 移动。关于模式,我们下次解释。
  3. Open Vim Tutorials 如果以上两款游戏都让你为难的话(喂,你不是吧?!),那么这就是你的救星啦。请直接跳到第三章练习四方向移动,等到开始习惯这种感觉了再继续挑战游戏。
  4. 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 的最终价值和意义吧!

你可能感兴趣的文章

27 条评论
TaoBeier · 2014年03月26日

对我而言,因为长期在linux下所以用vim 很长时间,有没有征服它我不知道,不过,肯定已经满足了我的需要。我总结出来的是:常用,vim 不管怎么样,它毕竟是个工具, 当你用的越多,用的命令越多, 为了你工作的方便你自然会去探究更多关于它的技巧, 随之而来的, 你也就会更懂vim

回复

vose · 2014年03月26日

+1 因为最方便的就是vim filename然后半个月下来就很习惯了,到后来一步步去尝试使用更多命令,变换更舒适的配色,用上自己合适的配置,自己也会去google,虽然谈不上什么使用的很溜,但绝对是习惯于vim式的快捷。

回复

RyanHoo · 2014年03月26日

好文章!我旁边就坐着一个这样的人,不过他自称他在vim上“过于激进”~不明觉厉的样子

回复

TaoBeier · 2014年03月26日

恩, 是的,我喜欢vim , 它可以让我的双手停留在键盘上,我可以完全不去使用鼠标就可以完成我所需要做的事情 。我也会去google ,虽然现在的配置不一定是最好的,但是满足我的需要了, 而且自己也很习惯现在的模式了

回复

weakish · 2014年03月28日

> 你只需要一个想要用它的亿元 s/亿元/意愿/ 还有,其实不习惯hjkl的话,用方向键和鼠标也是可以的(hjkl的好处是双手不离开打字区

回复

n͛i͛g͛h͛t͛i͛r͛e͛ 作者 · 2014年03月28日

Nice catch!

如果一直都不习惯 hjkl 的话,那就别用 Vim 了,多受罪呢不是,好的开发工具还有很多。

回复

kaizhuQin · 2014年03月28日

其实,也不用可以去死记,主要还是经常用,自然而然就能熟练了。

回复

n͛i͛g͛h͛t͛i͛r͛e͛ 作者 · 2014年03月28日

对嘛,所以我带大家玩游戏^^

回复

RyanHoo · 2014年03月28日

hi~ I am a Newb. 我实践了一下你的方法,还是觉得vim自己的vimtutor效果最明显,20-30分钟感觉就完全不一样了~游戏虽然happy,但是略慢,而且内容没有vimtutor充实~当然,一家之辞,诸君谨慎!

回复

n͛i͛g͛h͛t͛i͛r͛e͛ 作者 · 2014年03月29日

嗯,我的目的是为了让初学者少学一点。很多时候一次性了解了非常多的知识,然后急于去应用在实际工作当中,为了提高速度难免会忘记刚学的那些知识。如果你学习能力很强,也有很好的自控能力那么就不会是什么问题。适合自己的学习方法毕竟还是要自己去寻找,我也只是提供更多的选择罢了。至于感觉到慢,这是我有意的,我就是希望慢一点,而且很快就会变快,这里面的道理我在第二部分做了详细的解释。我认为对于初学者来说,关键不是学习的速度,而是建立自己的节奏感,只需要很少量的操作就可以达到这一点。你不妨做一个测试,三十分钟你学会了不少,然而那个贪吃蛇你能得几分?vim的入门并不算难,不过很快会碰到一个瓶颈,相信你会有所体会,到那时你不妨回来试试这些游戏,它们会帮你重新建立起节奏感,速度很快就能突破瓶颈。总结一点,vimtutor是学习,而文中那些游戏其实是练习。如果你希望内容丰富,可以选择 vim genius。

回复

RyanHoo · 2014年03月29日

got it! 非常感谢!

回复

花瓣奶牛 · 2014年04月06日

我当初学习vim的时候也没有什么压力,用多了自然就会了,回想12年,我刚上大一就使用linux的vim来写c语言,扩展那时候也不会安装,不过也没问题,毕竟也不写什么大程序,慢慢的,就熟悉了vim,虽然这段时间以来也参试过emacs,不过我还是喜欢vim

回复

JoeRay61 · 2014年04月10日

之前也尝试过使用vim,但是感觉很难上手,由于不熟悉做起事来效率很低,没几天就放弃了,最近又准备重拾vim,因为感觉能熟练使用vim是一件很牛的事,这篇文章真是太适合我了,保持简单

回复

franckXu · 2015年03月05日

说真的我不止一次想过,或许我一辈子都没法真正学会 Vim,但是内心坦白地说:我对自己很失望。

回复

n͛i͛g͛h͛t͛i͛r͛e͛ 作者 · 2015年03月05日

不用着急去学会,就可以很快学会,Vim 或 Emacs,每一个程序员都应该学会其一,我相信你可以的。

回复

imbili · 2015年03月05日

好文章!点赞!

回复

imbili · 2015年03月05日

提供的游戏非常好啊!真是帮了我们初学者的大忙!
我们平时使用的键盘指法是左手asdf 右手jkl; 恰好是vim的上下左右键hjkl右移一位 很不习惯啊 不知道博主有没有这样的问题呢?又是怎么解决的呢?谢谢~

回复

n͛i͛g͛h͛t͛i͛r͛e͛ 作者 · 2015年03月05日

没有特别去解决这个问题,因为这对我来说不是问题。

首先,我花了时间和精力练习标准指法和盲打,所以要去按哪一个键对我来说不是问题,纯粹是肌肉记忆。

其次,用 Vim 很少操作上下左右四个方向键。对于初学者来说,因为以前用四方向键习惯了,暂时拜托不了这种依赖方向控制的下意识。然而对于 Vim 来说纯粹的方向控制很少,并且随着你的水平提高,这种方向控制只会越来越少。

Vim 的高效在很大程度上体现在它的“目标控制”上,我要去哪里并不是靠移动方向完成的,而是靠指明目标完成的,因为移动方向是线性的,总会有多余的动作或时间浪费在“行走”在线性方向的过程中。而目标控制则是即时的,可以想象成“瞬间移动”,你只要告诉 Vim 目标在哪里,它就去了,并且顺便也把动作也做完了。

举个简单的例子,从 line 3 移动到 line 30,方向控制你得按几十次 j 键。初学者这么做情有可原但不代表正确,你得让自己习惯 27j 或是 30G 或者直接使用搜索来移动到位的方法。

回复

aoliong · 2016年01月01日

你好,看到你后面介绍的关于 Gary Bernhardt的事情,令我对他非常感兴趣。可以分享一些关于他的视频资料吗?谢谢

回复

n͛i͛g͛h͛t͛i͛r͛e͛ 作者 · 2016年01月01日

destroyallsoftware.com

要钱的注意

回复

载入中...
n͛i͛g͛h͛t͛i͛r͛e͛ n͛i͛g͛h͛t͛i͛r͛e͛

28.8k 声望

发布于专栏

太极客(Very Geek)

As a designeer, I hope you can prove me wrong.

231 人关注