十年的 Vim
我第一次意外打开 Vim 时,以为它坏了。我的按键会以无法预测的方式改变屏幕,而我想要撤销操作并退出。不用说,那是一次令人不快的经历。不过,它似乎有某种东西一直吸引我回来,后来它成了我的主力编辑器。
十年(!)过去了,我仍然在使用 Vim。在尝试过 Textmate、Atom 和 PhpStorm 之后,我还是觉得 Vim 最让自己自在。人们总是问我:为什么?
为什么是 Vim?
在 Vim 之前,我用过许多其他编辑器,比如 notepad 或 nano。它们的行为基本都符合预期:输入文本,用方向键或鼠标移动光标,用 Control + S 或菜单栏进行保存。而 VI(以及它的精神继承者 Vim)则不同。
Vim 中的一切都不一样,这正是它如此高效的原因。让我来解释一下。
Vim 之禅
Vim 背后的理念需要一段时间才能真正理解:其他编辑器把写作作为处理文本的核心,而 Vim 认为核心是编辑。
你看,大多数时候,我并不是在写新文本,而是在编辑已有的文本。
我塑造文本、整理文本、把它倒过来。写文本是一门手艺,也是一项艰苦的工作。你必须用冰冷而赤裸的双手塑造自己的想法,直到它们勉强形成一个连贯的整体。Vim 试图让这一痛苦的过程至少变得可以忍受。它帮助你保持控制。它通过提供锋利而高效的工具来修改文本,从而做到这一点。Vim 的核心是一门用于编辑文本的语言。
Vim,这门语言
Vim 的命令并不晦涩,你其实已经知道它们。
- 要< u>撤销,输入
u。 - 要< u>查找下一个 t,输入
ft。 - 要< u>删除一个 单 词,输入
daw。 - 要< u>修改一个 句 子,输入
cas。
很多时候,只要想想你要执行的操作,以及要对什么对象执行操作,就能猜出正确的命令。然后只需取每个单词的首字母。试试看!如果出了任何问题,你随时可以按下 ESC,再输入 u 撤销。
操作:删除、查找、修改、返回、插入、追加……
对象:单词、句子、括号、(HTML)标签……(参见 :help text-objects)
输入文本只是另一种编辑操作,可以通过 i 触发。这就是为什么默认情况下你处于普通模式(也称为命令模式)——在这个模式下,所有这些操作都可以使用。
一旦了解了这一点,Vim 就会变得更有道理,而这也正是你开始提高效率的时候。
这些年我的工作流如何改变
刚入门时,我非常想知道那些 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)大显身手的地方。它会高亮选中的文本。我应该更经常使用它。 - 使用多个寄存器进行复制和粘贴:目前我只使用一个寄存器(像一个 pastebin)来复制文本,但 Vim 支持多个寄存器。如果你想同时移动不止一个东西,这就很方便了。多用用它们吧!
- 标签页:我知道标签页的工作方式,但所有这些输入操作让人觉得很笨拙。这就是我从未广泛使用它们的原因。相反,对于较大的项目,我主要使用多个终端标签页,或者使用带有 Vim 键位绑定的 IDE。
我还会再学 Vim 吗?
这是一个很难回答的问题。
一方面,我会说不会。Vim 的学习曲线很陡峭,而随着各种现代 IDE 越来越善于理解用户的意图,编辑文本总体上变得更容易、更快速了。
另一方面,Vim 是对我来说最快的记录想法和编写代码的方式。更棒的是,它能运行在每一台机器上,而且很可能在未来几十年里依然存在。相比之下,我不知道 IntelliJ 的快捷键在十年后是否还会有用(附注:如果你在未来读到这篇文章,并问自己“IntelliJ 是什么?”,答案可能是否定的)。
要点
如果只能给你一条建议,那就是:不要靠记忆命令来学习 Vim。相反,看看你当前的工作流,试着改进它,然后看看 Vim 如何让这一过程变得更容易。看看其他人使用 Vim 的方式,从中获得灵感也很有帮助(Youtube 链接,有声音)。
你会花很多时间写文本,因此,投入时间把一个编辑器学得非常好是很值得的——尤其是对程序员来说。
十年之后,Vim 不知不觉已经深深植入我的脑海。编辑文本时,我会想到 Vim。它已经成了我的另一种自然语言。我很期待接下来的十年。
随机一篇博客