翻译计划:我是如何学会爱上 VIM 的

这是第一篇翻译文,带着兴奋,翻译自己喜欢的文章,这种感觉很美妙~

先介绍下本文的作者:

Sanchit Gera
Just another opinionated, run-off-the-mill geek • AdTech @Amazon • Engineering @uWaterloo.

原文链接:How I learned to love vim

以下是译文:


我与 Vim 之间既苦涩又甜蜜的关系维持了相当长的一段时间。

在过去的几年间,我数次尝试着去学习 Vim,但每一次到最后还是放弃了。我更愿意去使用我的“初级”文本编辑器(通常是 Atom)。

但在几周以后,我发现自己无法使用 Atom 了,因为其中一个模糊的连通性问题,这个问题使得我建立在远程连接的设置完全失效了。

在经历过五个令人悲伤的阶段后(译者注:哦,天知道发生了什么),我决定咬紧牙关(再一次)试着去学习 Vim。这一次我强迫自己去使用 Vim,并且是只使用 Vim。

我知道——我可以很轻松的转向另一种更简单易用的编辑器比如说 Sublime。或者甚至可以使用非常成熟的 IDE 比如 IntelliJ

但是,我还是决定闯一闯所谓的“地狱”。下面是我学习到的一些东西:

This would take some really bad luck…

学习基础

如果你没怎么用过,Vim 可能看起来像是一个非常古老的文本编辑器。说起它的来源,需要追溯到一款在七十年代出现的叫做 Vi 的程序。

由于 Vim 的设计初衷就是完全依赖键盘就能工作的编辑器,所以这也成了它既吸引人又让人讨厌的地方。毕竟当 Vi 被构思出来时,只需要鼠标点点的那些 GUI 可视化界面还并不是怎么实用的东西呢。

Vim 使用模式(mode)的方式来操作,有两种主要的模式最常被使用到:

  • 正常模式(Normal mode):这种模式是在你浏览、编辑或者操作文件的时候使用。如果你不涉及输入新的内容到文件中,该模式下你可以做任何其他事。大多数的 Vim 命令都是在这个模式下完成。
  • 插入模式(Insert mode):这种模式允许你输入新文本到文件中去,这时候 Vim 表现得更像是一个“正经”的文本编辑器,比如 Atom 或者 Sublime。当然了,还是不需要使用鼠标的,即使你想用也用不了 :)

Vim 也还有其他模式,其中一个是 虚拟模式(Visual mode),在选择大段文本的时候使用。一般来说,这些模式在平时使用的频率不高。

Vim 一般是在终端模拟器中使用的,但单独的发行版也是有的。Vim 可以被使用在任何 Unix 和 Linux 操作系统上。Vim 的爷爷——Vi,作为 UNIX 规范的一部分,很自然的,它被预装在任何基于 UNIX 的合格操作系统上。

可组合性

“可组合性”使得 Vim 在很大程度上区别于其他编辑器。它赋予了 Vim 独有的语言。

它在文本编辑和操作的语境中,引入了名词和动词的概念。

动词描述的是你能做什么(比如删除、改变、移动等)。

名词描述的是正在发生的事情(通常是单词、行或者文本中的某些地方)。

其中一些常见的动名词包括:

动词
d:删除
c:改变(覆盖)
y:复制
>:缩进
<:取消缩进

操作
h,j,k,l:向左,向下,向上,向右
w:下一个单词
b:上一个单词
0:行首
$:行末
i:单词内(不含下一个字符)
a:单词周围

这份列表并不详尽,其实有非常多可使用的快捷键。但是你仅仅使用其中非常基础的几个快捷键就能够实现大部分操作。方法就是将动名词和偶尔出现的数字组合在一起,你就能创建出不同的 行为 去操作需要的文本。

举个例子,为了删除一个单词(delete a word),你可以键入组合键 dw

从当前位置删除两个单词(delect 2 word),你可以输入 d2w

从当前位置一路删除至行末,你可以输入 d$

(译者注:我其实也是一个 newbie,看到这几个例子立马去试了一下,发现真好用,试着键入 d0,哈哈,果然将当前位置至行首的内容都删除了~)

删除当前括号内的所有内容,你可能会键入 di(,是的,就是这样 :)

这种工作方式似乎没有什么好争论的,它们是那么高效优雅。如果你强迫自己每天去使用这些组合,它们会成为你的第二天性。在一段时间后,你会发现通过减少按键次数而获得的编辑速度是令人惊讶的。

Vim 让人上瘾

是的,我知道这个已经被用的不能再多了,但请允许我再用一次 :)

Vim 有着臭名昭著的学习曲线。而一旦你度过了那段艰难时期——经常对着电脑屏幕发诅咒(译者注:当你用不了鼠标,想要跳到某个字符却不知道怎么能快一点,傻傻的移动方向键,内心是多么的崩溃。。。),Vim 用起来其实挺好玩的。

学习使用 Vim 的那些神秘命令,让你能够在操作文件上飞起来~一段时间过后,当你的手指离开了键盘或者不自觉的去使用鼠标的时候,你会觉得哪些地方不对劲(译者注:Vim 让你的手指完全不需要离开键盘就能飞一般的工作,用惯了 GUI 的我在以前想都不敢想。。。怎么可能嘛,是的,Vim 做到了!)

仅仅在一个月之后,我发现自己在使用电脑的时候总是会不自觉的去用那些快捷键,尽管那些软件并没有这些快捷键。

事实上,我也曾经考虑过在浏览网页的时候尝试使用这个 扩展 来启用 Vim 快捷键。

幸运的是,编程社区都承认 Vim 的地位。大多数主流的文本编辑器都总是有那么一些方法能够启用 Vim 的快捷键。这也使得 “Vimmers” 能够脱离在世界上最好的两种事物上要做出选择的苦海。

给 Vim 一次战斗的机会

要想提高在 Vim 上的造诣,没有任何其他什么武功秘籍,唯有日夜苦练基本功。行之有效的方式就是强迫自己用 Vim。

举个例子,当你使用 Vim 编辑文件的时候,尽量不要使用你之前的旧习惯。大多数人在刚开始的时候应该尽量远离 ‘正常模式’。

相反,他们试图花尽可能多的时间在‘插入模式’上。在这个模式上,很容易让人产生舒适感。这也容易让人在编辑文件的时候学不到任何其他新的东西。很明显这是一个错误。

如果你确实有兴趣学习如何让 Vim 为你工作,那么你必须付出一些努力,花些时间去找出做事情的正确方式。

如果你发现自己为了完成任务,不停地重复按那些键,请先停下来。因为很可能你正在做的事情有更好的方式去完成。

Google 一下,记住它,加入你的知识库中。相比于去阅读整个命令清单并试图希望自己会在将来会需要用到其中一个命令,用这种方式非常容易能学到新的命令。

在一段时间后,当你在无脑敲键盘的时候,你就可能会产生一种直觉(译者注:这种直觉类似于意识到自己目前在解决这件事的方式上可能会有更好的处理办法)。那么请听从你的直觉。

感谢(?)现代编辑器

许多人回避 Vim 的另一个重要原因就是 Vim 看起来光秃秃的只有编辑这一个最最基本的功能。

确实,默认情况下,Vim 本身并没有自带什么插件或者好用的功能的。并且,Vim 认为好用的功能可能与程序员使用的现代 IDE 认为的好用的功能有着比较大的差别。

Vim 其实是有语法高亮功能的(但默认情况下是被禁用的)。Vim 也没有行号显示(也需要你去将其开启)。

不用惊讶了,下面这些东西也是默认没有的:

  • 默认的 Git 集成
  • 代码提示
  • 自动标点配对
  • 代码片段
  • 自定义的颜色试图

这些都是不预装在 Vim 中的。

译者注:其实写到这里,我觉得已经有很多人萌生了退却之意,确实要想玩好 Vim,需要花不少时间,免不了诸多的折腾。爱折腾的人自然是兴奋不已,比如译者自己。但不爱折腾的,译者还是鼓励去试着玩玩看,虽然现代 IDE 自带了相当多的功能,但是很多功能你也是需要去折腾才能熟练的使用。

这似乎是一个巨大的转折点——尤其是对于那些使用强大的 IDE 的开发者们。大量的插件和扩展被预装在上面,为了能够使工作更有效率。

从这个角度上来看,Vim 却有其局限性。

然而,在另一个方面,即便你欣赏现代 IDE 提供的东西,以及通过它们构建出的东西——你也会意识到,大多数的 IDE (甚至是一些普通的编辑器,如 Atom)都带来了大量的膨胀。

高级的 IDE 充斥着许许多多普通用户几乎很少使用的特性。

学习有效地使用 Vim 在某种程度上其实是一种锻炼,你可以慢慢发现哪些插件对你来说是至关重要的。重点是打造出一款适合你的需求和工作流的独一无二的编辑器。(译者注:这一点太能打动我了 TAT)

多数情况下,使用 IDE 这些完全成熟体无可厚非。这些高级功能给你带来的好处确实可能远超使用 Vim 带来的。

但是!Vim 能够让你搞清楚自己,因为它是直面你的内心的 :P

尽管 Vim 看起来光秃秃的,但是它其实是拥有一个非常完备、蓬勃发展的插件生态系统。

Vim 拥有几乎所有你能在其他编辑器中用到的插件。你只需要找到那些你需要 的就好了。

让我惊讶的是,在只有少量插件的情况下我能走得有多远。目前我的 Vim 大概只有 5 到 6 个“基本”插件组成,但我真不觉得我错过了什么。

Vim 并不是完美的,而且也绝对不是适合所有人的。

但是至少,学好 Vim 有一个好处,万一你哪一天突然不小心打开了 Vim,然后找不到如何退出的方法。。。! ;)

本文章首发在 Laravel China 社区

正在探索技术和生活如何能更好的结合...