十年 Vim
原文由 Matthias Endler 于 发布,订阅该博客
第一次不小心打开 Vim 时,我还以为它坏掉了。按键后屏幕的变化完全无法预测,我只想撤销操作然后赶紧退出。不用说,那是一次很糟糕的体验。不过,它身上又有某种东西让我一次次回来,最终它成了我的主力编辑器。
十年过去了(!),我依然在使用 Vim。期间我尝试过 TextMate、Atom、PhpStorm 等各种编辑器,最后还是觉得在 Vim 里最自在。人们总会问我:为什么?
为什么选择 Vim?
在用 Vim 之前,我用过记事本、nano 等不少编辑器。它们的操作基本都符合预期:输入文字,用方向键或鼠标移动光标,用 Control + S 或菜单栏来保存。而 VI(以及作为其精神续作的 Vim)则完全不同。
Vim 里的一切都与众不同,而这正是它如此高效的原因。让我来解释一下。
Vim 之禅
Vim 背后的哲学需要花些时间才能领会:其他编辑器把“写作”当作处理文本的核心,而 Vim 认为核心是“编辑”。
你看,大多数时候我并不是在写全新的文本,而是在编辑已有的文本。
我塑造文本、调整它、把它彻底翻转。写作是一门手艺,也是一项苦活。你得用冰冷的双手去打磨自己的想法,直到它们勉强形成一个连贯的整体。Vim 试图让这个痛苦的过程至少变得可以忍受。它帮你保持掌控,方式就是为你提供锋利、高效的工具来修改文本。Vim 的核心,就是一门用于编辑文本的语言。
Vim,一门语言
Vim 的命令并不晦涩,你其实已经认识它们了。
- 要撤销(undo),输入
u。 - 要查找(find)下一个 t,输入
ft。 - 要删除(delete)一个(a)词(word),输入
daw。 - 要修改(change)一个(a)句子(sentence),输入
cas。
很多时候,你只要想好要执行什么操作、要对什么对象执行,然后取每个单词的首字母,就能猜出正确的命令。试试看!就算出了错,也可以随时按 ESC 再输入 u 来撤销。
操作:delete、find、change、back、insert、append……
对象:word、sentence、parentheses、(html) tag……(参见 :help text-objects)
插入文本也只是一种编辑操作,用 i 就能触发。这就是为什么默认情况下你处于普通模式——也叫命令模式——在该模式下所有这些操作都能生效。
明白了这一点,Vim 就变得合理多了,你也真正开始变得高效。
这些年我的工作流是如何变化的
刚入门时,我很好奇那些更有经验的人是怎么使用这个编辑器的。现在作为一名老用户,我的答案是:没有什么秘诀。编辑了一整天文本后,我的确感觉没那么累了,但我常用的命令 90% 都能写在一张便签纸上。
不过,这些年来我的 Vim 使用习惯还是发生了变化。
我经历了几个阶段:
第 1 年:能输入文字再退出就很满足了。
第 2 年:不错,再多学点快捷键。
第 3-5 年:把所有功能都加上!!!
第 6-10 年:我的 .vimrc 只有五行。
真正开始了解 Vim 生态是在第三年。我尝试了各种版本,比如 MacVim,还有 janus 这样的发行版。有一段时间,我甚至维护着自己的 Vim 配置,足足有将近 400 行。
这些的确帮我了解了都有哪些东西,但我不确定是否会推荐 Vim 新手也这么做。毕竟,你其实并不需要那么多。从最原生的 Vim 开始就很好用了!
我现在的 Vim 配置非常极简。我已经不再使用插件了,很大程度上是出于懒惰,也因为 Vim 内置的命令或宏就能替代它们。
下面是这些年我的工作流发生改变的三个具体例子:
一开始,我大量使用“数字驱动的移动”。也就是说,如果有一个像
b这样能后退一个单词的命令,你也可以输入5b来后退五个单词。现在我大多用/来跳转到匹配的单词,因为更快。我不再用方向键在文本中移动,而是强迫自己使用
h、j、k、l。很多人说这样更快。尝试了几年之后,我觉得并非如此(至少对我来说)。现在我只是出于习惯才坚持这么用。在我的主力工作机上,我用 Vim 来做快速的文本编辑,用 Visual Studio Code 加上出色的 Vim 插件来做项目。这样就能兼得两者之长。
至今仍困扰我的工作流问题
这么多年过去了,我依然算不上 Vim 高手——还差得远。就像其他 Vim 用户会告诉你的那样,我们都还在学习中。
下面是几件我希望能做得更好的事:
- 在长文本中跳转:我已经掌握了基础操作,比如搜索(
/)、跳转到匹配的括号(%)或跳转到指定行(比如跳到第 10 行就输入10G),但我本可以更常利用符号来导航。 - 用可视模式移动文本:有时要输入正确的字母组合来剪切(删除)想要移动的文本会相当复杂。这正是可视模式(
v)的用武之地。它会高亮选中的文本。我应该更常使用它。 - 用于复制粘贴的多寄存器:目前我复制文本时只用一个寄存器(就像一个粘贴板),但 Vim 支持多个寄存器。如果你想同时移动多个内容,这会很方便。多用用它们吧!
- 标签页:我知道标签页怎么用,但输入操作总感觉很笨拙。所以我从来没有大量使用它们。相反,做大项目时我大多使用多个终端标签页,或者带有 Vim 键绑定的 IDE。
我还会再学一次 Vim 吗?
这是个很难回答的问题。
一方面,我会说不会。Vim 的学习曲线很陡峭,而且随着现代 IDE 越来越善于理解用户意图,文本编辑总体上已经变得容易和快速得多了。
另一方面,Vim 对我来说是记录想法和编写代码最快的方式。额外好处是,它在每台机器上都能运行,而且很可能在未来几十年里依然存在。相比之下,我不知道十年后 IntelliJ 的快捷键是否还有意义(注:如果你是在未来读到这篇文章,并问自己“IntelliJ 是什么?”,答案可能是“已经不重要了”)。
收获
如果只能给你一个建议,那就是:不要靠死记硬背命令来学 Vim。相反,先审视你现有的工作流,试着让它变得更好,再看看 Vim 如何能让它变得更轻松。看看别人如何使用 Vim 来获取灵感也会很有帮助(YouTube 链接,有声音)。
你会花大量时间写文本,所以花时间把一个编辑器学精是非常值得的——尤其是当你是一名程序员时。
十年过去,Vim 已经深深印在了我的脑海里。编辑文本时,我的思考方式就是 Vim。它对我而言已经成了另一种自然语言。我期待着下一个十年。
随机一篇博客
评论
登录后参与讨论