我是怎么同时掌握 Vim 和 Emacs 的?

看到这个标题,肯定会有人站出来说,“异教徒,烧死!。。。”

我是怎么学会 Vim 的

我与 Mac 结缘

2010 年下半年, 当时我还是研一,不甘寂寞的我找到了一份 iOS 兼职游戏开发的工作,那是我生平第一次接触 Mac。当时我使用的是一台 MacMini。不过老板人比较好,允许我带回宿舍。对于一个被 Windows 毒害了多年的码农,Mac 对于我真是救星。这期间我学会了 Git,并且大量使用命令行来操作 Git。由于 Mac 上面的包管理器 Homebrew 非常好用,我又开始折腾 Shell。这期间我接触了 iTerm2,Oh-My-ZSH,Alfred 和 Tmux。我的命令行使用越来越熟练,我开始尝试全键盘操作,完全脱离鼠标,只依靠键盘和触摸板来工作。因为 Mac 的触摸板非常好用,所以,我又一次成功地超越了自己。后来,我发现 Git 的很多操作需要配置编辑器,而默认的编辑器则是 Vim。因此,我又下决心要学好 Vim。就是这样,我入了 Vim 教。

打造 Vim 神器

在学习一样东西之前,我都会用 Google 搜索一下。比如“How to learn Vim”,”The best way to learn Vim”。一般我都可以从 Stackoverflow 和一些牛人的博客找到灵感。这里温馨提示一下,一定不要用百度搜索,另外,一定要打好英语基础。牛人推荐的是先认真练习完 Vimtutor,我当时练习了 1 周,每天练习半个小时。很快,我就生存下来了。接下来,我开始配置大量插件,并且尝试打造 IDE。这期间做的事情大概就是从 Github 上面各种 Copy 别人的配置。时间过得很快,而我的 Vim 效率也在一点点提升。不过还是没能体会高手口中的“神器”的感觉。直到后来,《Practical Vim》一书的出版,它让我彻底被 Vim 的强大征服了。我把此书读了 5 篇,每次读都能学到不少东西。后来我又坚持使用了 2 年多,我感觉自己的 Vim 一度出现了瓶颈。后来在好朋友一叶道长的影响下,我开始学习 Emacs。

我是怎么学会 Emacs 的

Evil

刚开始接触 Emacs 的时候,我完全被它的奇葩按键打败了。而且我在观看同事使用 Emacs 的时候,感觉也完全没有 Vim 高效。不过 Org-mode 吸引了我,我开始配置 Org-mode 和 GTD,不过这期间小拇指伤到了。。我发现自己适应不了 Emacs 的原生按键。后来,我找到了一个 Vim 模拟器--Evil,它拯救了我。因为之前我也有在 Vs,Eclipse 和 Xcode 里面使用 Vim 模拟器,而 Emacs 的 Evil 应该是最好的 Vim 模拟器。正因为有了 Evil,我从 Vim 无缝地转到了 Emacs。但是如果我之前完全不会 Vim,那么我肯定是学不会 Emacs 了。因为 Emacs 的原生按键真的可以让你的小拇指变残废。(不是黑,不信你可以试试,把 Emacs Tutorial 操作完,酸痛感立马就有了,HHKB 都没用)

Prelude

Prelude(bbatsov/prelude )是一个 Emacs 的 StarterKit,它的作者是流行插件 Projectile 的作者。这个配置是我第一个坚持使用了一年多的 Emacs 配置。因为它的文档非常齐全,所以,我很快就理解了它的配置。而在此之前,我有读过 chen bin 大神的文章《一年成为 Emacs 大神》,从它的文章中,我得知他也是 Evil 党。所以,我开始尝试他的配置。他的配置文档比较少,不过功能确实强大,但是很多我用不起来。另外,由于他的配置中有很多他自己的喜好(比如快捷键绑定),我适应不了。后来,我又尝试了purcell/emacs.d,不过最终我还是转向了 Prelude。经过一年多时间的学习和运用,我也积累了自己的配置zilongshanren/prelude 对于新手 Emacs 用户我是极力推荐 Prelude 的。

Spacemacs

现在我在用 Spacemacs(syl20bnr/spacemacs),而且我也打算一直用下去。Spacemacs 是一个设计精妙,而且对 Vim 用户非常友好的 Emacs 配置。它的快捷键设置甚至对于原生 Emacs 用户来说也是非常好用的。在接触 Spacemacs 之前,我有学习过 Intro to Elisp 和 A little Scheme。这也让我对 Hack Emacs 更加游刃有余。大家可以在 Github 上面找到我的配置:zilongshanren/spacemacs-private 我的配置主要是 C/C++,Python,Markdown,Org-mode,CMake 和 Shell。

现在我在用 Vim 还是 Emacs

现在我大部分时间都在使用 Emacs,偶尔登录到服务器上的时候还是会使用 Vim。另外,在使用 Git 做 interactive rebase 的时候,也会使用 Vim。但是,实际上我还是没有完全放弃 Vim,因为我使用的是 Evil+Emacs。为了让 Vim 在服务器上更容易配置,我把 Vim 插件做了精简,同时也删除了一些不必要的配置。我的 Vim 配置也托管在 Github 上面: zilongshanren/dotfiles

给初学者的建议

对于初学者来说,到底学习 Vim 还是 Emacs 呢?如果我说“先学习 Vim 再学习 Emacs”,你们肯定会以为我疯了。事实上,你可以两个都尝试一下,可以先学习 Vim,如果两周还学不会的话, 就可以换 Emacs 了。如果还是学不会,那就等一段时间再学习吧。专业程序员,一定有一个可扩展的编辑器,而 Vim 和 Emacs 是最好的选择之一。当然你们可能会说,现在 Sublime 和 Atom 很强大,也可以扩展。但是目前来说,社区质量和插件质量跟 Vim 和 Emacs 社区都是无法比的。

总结

放在 3 年前,我肯定不敢想像我能同时掌握两大神器。但是,现在我做到了。那到底是什么让我做到的呢?完美的计划?强大的毅力?超强的学习能力?我想都不是。我在使用 shell 的时候,为了提高效率,我学习了 Vim。为了最大限度地发挥 Vim 的威力,我深入学习了 Vim。为了扩展眼界,我尝试了 Emacs。因为我学会了 Vim,进而加速了我掌握 Emacs。或许,这可以成为我以后掌握一项技能的借鉴。