生活在Vim中

从第一天接触Vim编辑器到现在已经过去10年了,从最开始的不知所措到现在的运用自如,Vim已经融入到了我工作生活的很多场景, 它对于我已经不仅仅是一个高效强大的编辑器,更是变成了一种做事的方式和编辑,操作的哲学。关于这种哲学我最喜欢一个类比: 使用Vim的过程就像是一个画家画画的过程,当一个画家需要挥毫泼墨时,他就进入了insert模式,可以对画布进行任意的修改,当一个画家需要思考和审视时,他需要防止笔误和操作失当,这个时候他就需要进入normal模式,这个时候不能修改画布,只能在画布上移动,无论是移动你的手指和思绪,这个时候都不能对画布进行修改。这种特有的多模式也许是Vim和Emacs与其他大部分编辑器最显著的不同。

当你初窥Vim的与众不同后,如果你还不熟悉它的使用,你可能会不知所措,甚至无法编辑,无法退出,你和它会僵死在那里。你遇到的这种困境也正是Vim特有的操作方式引起的。这篇文章不打算如流水账般罗列Vim的诸多命令,我只挑选几种在日常代码编辑中最常用的命令来呈现Vim的神奇与强大。Vim之强大主要体现在无论是移动查询还是修改替换都能将一个动作做到非常小的粒度和精确控制,并且可以以极少的击键次数优雅地实现你精细的操作。我来举一个最常见的例子:

int i = 3 * (4 + 2);

如上,假如我们想将括号中的内容改掉,一般的编辑器的做法都是移动到数字4,然后完全选中括号中的内容后修改。但是如果使用Vim,动作将会非常简单和快捷,只需移动到左括号后键入ci(即可,然后就可以直接进入insert模式修改了。敏感的读者可能已经感知到Vim的这条命令其实就是change in (),有非常强的自然语言命令的感觉。

因为vim的使用其实可以写成一本书,网络上的教程更是数不胜数,这篇文章也不打算写成一篇使用教程。vim本身的使用需要长期的实践,而vim的使用场景的扩展可能就需要不断的探索和尝试了。我因为长期使用vim,对其浸润很深,所以发现了不少vim的其他使用方式和场景。第一个场景就是vim的命令和操作方式以插件的形式存在于其他的编辑器,IDE和软件应用中。 以下是三个典型的插件:

  • VsVim(这个是大名鼎鼎的Visual Studio的一款Vim插件)

  • VSCodeVim(for Visual Studio Code)

  • IdeaVim(for Android Studio)

这三个插件都是应用于IDE或编辑器, 下面的这个插件甚至应用于Google浏览器:

  • Vimium

其实按照这个思路,凡是有编辑需求的应用都可以嵌入Vim插件,这样的话即使某一天Vim这个编辑器不存在了, Vim的这种思想却可以一直存在下去,这也许就是Vim的魅力吧! 至此,谈到Vim的永生,就不得不谈一个我最近几年一直在用的Emacs变体–Spacemacs。Spacemacs本质上还是Emacs,一个厉害的程序员通过配置文件将其扩展成了一个可以同时支持Vim和Emacs操作的巨无霸,足见Emacs的强大的可扩展性。当你第一次使用Spacemacs时会让你选择Vim世界还是Emacs世界,两大上古神奇竟以此种方式存在了下来…

使用Vim的历程,从排斥到爱不释手到离不开,Vim已成为工作生活的一部分,可谓一日Vim,终生Vim.