你好,我是吴咏炜。
我们的课程到这里就结束了,而你的学习旅程,到这儿只能算是一个小小的休息站。
对于一个持续发展了 30 年的编辑器,我们显然不可能在一门短小精悍的课程里完整地覆盖它的所有功能。不过,我从来就没打算介绍 Vim 的一切。如果把 Vim 比作一片大森林,我只是一个导游,为你制定了一条旅游路线,带你绕过沼泽地和陷阱,攀上了几座峰顶,让你能够领略到若干美景。如果想在林中长久地居住下去,熟稔各条秘径,你仍然要靠自己去探索。
Vim 的作者 Bram 这么告诫人们不要走到两个极端上去 [Moolenaar 2007]:
你需要马上把文本准备好。所以没有时间读文档或学习新命令。——你会一直使用原始的命令。
你想学编辑器提供的所有功能,并在任何时候都能使用最高效的命令。——你会浪费很多时间学习很多你永远不会用到的东西。
前者的问题很明显,如果你不学习,那你只能使用初级的功能,所以效率一定很低。后者的问题可能不那么明显了:实际上,除了多花时间之外,你很难培养出良好的习惯,形成“肌肉记忆”。而这,恰恰是高效工作的关键之一——不需要想,就知道怎么做,从而可以把头脑和精力投入到更重要的问题上。
在这个课程里,我也只是告诉你基本的原则和技巧,并培养你基本的编辑习惯。回头,在遇到实际问题时,你会需要使用搜索引擎、讨论组等工具来找到问题的答案。
我学习 Vim,原本是处于 Linux 下开发的需要,而后慢慢成为一种习惯。回过头来看,Vim 就和 Unix 一样,老而弥坚,经久不衰,不管时代怎样变化,它们却一直没有过时。而同时代我用过的其他 Windows 上的编辑器,如 EditPlus 和 UltraEdit,现在虽然都还在,但是应该已经很少有人提起了吧……
经过几年的学习和使用,我居然也就可以给别人分享我的经验了。我先是在 IBM developerWorks 上发了一系列的三篇 Vim 文章,后面又在 SHLUG(Shanghai Linux User Group)的活动中分享了我的 Vim 使用经验。事后,我在网上看到别人觉得我这个分享做得最好,也是非常的欣慰。
时间快进到今年的年初,我做完了我在极客时间的第一门课程《现代 C++ 实战 30 讲》。当编辑问我还有什么其他可分享的课程时,我立刻想到了 Vim。于是,就有了这个课程。我很喜欢知识分享的过程,因为准备的过程同时也是自我梳理和刷新的过程,毕竟要给别人讲,就不能像自己用的时候那样不求甚解了。让我没预料到的是,在课程中我还向某些积极的同学学了一两手(为了不让你们太骄傲,我就不点名了😉)。知识分享真是一种非常好的活动,于人于己都非常有利。建议大家在工作中也可以多多考虑😇。它唯一的缺点,就是会让自己变得非常忙碌、周末没有休息时间而已😂。
现在回到 Vim。我们来考虑一下这个“元”问题:怎么样可以进行高效的编辑?
事实上,Bram 早就回答过这个问题了。这跟一般的效率改进计划没有本质的区别。我们要做的是:
Vim 的功能也是围绕着这样的模式开发出来的。
比如,我们要找出当前文件中某个符号的使用,在任何编辑器里,都会提供一个搜索的功能。但每次都使用搜索,实际上也是有点麻烦的。Vim 里的 *
搜索键和搜索加亮,这两个你目前应当已经习以为常的功能,就是为了解决这种低效而诞生的。而对你,现在更快的方法,就是在配置中启用搜索加亮(目前我们的基本配置里已经启用),并使用 *
来搜索光标下的单词。
又比如,我们有一个非常长的函数名,打起来又费力又容易出错。这时候,我们需要找出更快的方法,那就是自动完成。Vim 内置的改进方法是 <C-N>
和 <C-P>
命令。而我们学到现在的就该知道,YCM 还提供了更现代的模糊完成引擎。用好内置命令,或安装合适的插件,就是我们需要形成的新习惯。
说到这儿,你也看到了,不仅我们的课程不是高效编辑的终点,而且就连 Vim 也不是。Vim 一直在发展,但有人嫌 Vim 发展得不够激进,另外搞了 Neovim。我们这个课程完全没有讨论 Neovim,主要是不想在一个已经很复杂的课题上再增加复杂性(同时也是因为 Neovim 虽然看起来势头不错,但远没到可以尘埃落定、一定会在将来替代 Vim 的程度,再加上两者并不完全兼容……反过来,Neovim 倒是刺激 Vim 更快地添加新功能了)。
抛开 Neovim 不谈,我们还有插件:正是这些辛勤的插件作者,才使得 Vim 真正更为强大,成为一个特别高效的编辑器。就像上面讨论的,有了 YCM,我们找到了一个比 Vim 内置功能更加简单、直观、高效的方法。我们也应该去用好这样的新工具,提升自己的工作效率。
要提高自己的编辑效率,需要时时刻刻注意自己有哪儿效率特别低,出现了不必要的重复,然后找到更好的办法来改进,并确保自己形成新的习惯。
这个新的习惯是什么呢?可以是掌握了 Vim 里的一个之前不熟悉的功能,可以是用上了一个新的插件,也可以是……为 Vim 社区贡献一个新的插件!
这也恰恰是我在开篇词里提到的“懒惰”。所谓懒惰,就是我们要不让自己做低效的重复工作。而要不做低效的重复工作,我们就需要开动自己的脑子,监测自己的工作方式,找出问题点,予以改进,并坚持下去。懒惰的手段就是高效;反过来说也可以,高效的目的就是懒惰。
期待你在 Vim 森林里找出自己的“传送门”,能够慵懒地一抬腿,就飞速到达任何自己想去的地方。
我们后会有期!
《Vim 实用技巧必知必会》课程结束了,这里有一份毕业问卷,题目不多,希望你能花两分钟填一下。十分期待能听到你说一说,你对这个课程的想法和建议。
作为写作的基本规矩,我最后列一下我参考过的资料(插件和之前文中直接给出的链接则不再重复)。希望它们也能帮到你,让你在下面的旅途中再上一层楼:
Allen, Leo. 2016. “Why Vim is so much better than Atom”.
Arthur, Barry. 2014. “Learning the tool of Vim”.
Bringhurst, Robert. 2012. The Elements of Typographic Style, 4th ed. Hartley & Marks Publishers.
Irwin, Conrad. 2013. “Bracketed paste mode”.
Kochkov, Anton. 2019. “Terminal Colors”.
Leonard, Andrew. 2000. “BSD Unix: Power to the people, from the code”.
Moolenaar, Bram. 2000. “The continuing history of Vim”.
Moolenaar, Bram. 2002. “Vim, an open-source text editor”.
Moolenaar, Bram. 2007. “7 habits for effective text editing 2.0”. YouTube video.
Moolenaar, Bram. 2018. “Vim: Recent developments”.
Neil, Drew. 2015. Practical Vim, 2nd ed. O’Reilly. 中文版:杨源、车文隆译《Vim 实用技巧》,人民邮电出版社,2014(第一版),2016(第二版)。
Neil, Drew. 2018. Modern Vim: Craft your development Environment with Vim 8 and Neovim. Pragmatic Bookshelf. 中文版:死月译《精通 Vim:用 Vim 8 和 Neovim 实现高效开发》,电子工业出版社,2020。
Ornbo, George. 2019. “Vim: you don’t need NERDtree or (maybe) netrw”.
Osipov, Ruslan. 2018. Mastering Vim. Packt. 中文版:王文涛译《Vim 8 文本处理实战》,人民邮电出版社,2020。
Robbins, Arnold, Elbert Hannah, and Linda Lamb. 2008. Learning the vi and Vim Editors, 7th ed. O’Reilly.
Salus, Peter H. 1994. A Quarter Century of UNIX. Addison-Wesley.
Schneider, Peter A. 2018. Answer to “How do I disable the weird characters from ‘bracketed paste mode’ on the Mac OS X default terminal?”.
Stack Overflow. 2015. “2015 developer survey”, section “Technology > Text editor”.
Stack Overflow. 2019. “Developer survey results 2019”, section “Technology > Development environments and tools”.
Target, Sinclair. 2018. “Where Vim came from”.
Vance, Ashlee. 2003. “Bill Joy’s greatest gift to man – the vi editor”.
Wikipedia. “Berkeley Software Distribution”.
Wikipedia. “Bill Joy”.
Wikipedia. “ex (text editor)”.
Wikipedia. “Version 6 Unix”.
Wikipedia. “vi”.
Wikipedia. “Vim”.
Wikipedia. “Visual editor”.