从「什么是Vim」开始、その一

从「什么是Vim」开始、その一

题图

专栏头像来自:Neovim,未修改,CC BY 3.0

(为毛封面都要黑Emacs用户?!)其实我只是想找找有趣的Vim/Emacs的图然后看到了这个。搜遍了知乎才发现原来没有人提问过“什么是Vim”这样的问题,如果你会用hjkldocgg=G]s的话,你也许会想看看如何优雅地使用 Vim? - 如何优雅地 X这样教已经「会移动光标」的用户开始使用Vim的指南。

然而我相信,至少在知乎这样的一个不是程序员社区的地方,大多数读者可能不知道什么是UNIX,什么是Vim,什么是Emacs;如果是一些刚刚会用Pycharm写写Python的用户,也可能会不知道IDE和「文本编辑器」的区别;所以我决定从介绍「什么是」Vim开始,讲述文本编辑器之中的佼佼者Vim以及他(可以期待的)21世纪的重生NeoVim的故事。

------------------------------------------------------------------

同时推荐Vim - 知乎专栏Vim非编程手记 - 知乎专栏给「用Vim编程」和「不编程但是想日用来处理文本」的人

------------------------------------------------------------------

「文本编辑器」从名字可以看出来是用来「编辑」文本的(第一句就是废话)。比如极为常见的Windows里的「记事本」,OS X里的「TextEdit」等等……都是文本编辑器;既然Vim也是文本编辑器,什么特性能让它鹤立鸡群呢?

Wiki

Vim是从vi发展出来的一个文本编辑器。一开始取名自「Vi imitation」(Vi效仿);在1992年1.22版本移植到UNIX和微软DOS操作系统上的时候正式更名为「Vi improved」。原作者为布莱姆·米勒(Bram Moolenaar)

而vi本身更是一个早在1976年就发布的编辑器,原作者为比尔·乔伊(Bill Joy
)。Vim的一些基础特性即是继承于vi的设定。

这些都不是很重要,他们本身都只是个人为了方便自己编辑文本,随后扩散开来的「好使的文本编辑器」而已。对于现代「普通电脑用户」来说,最奇异的地方在于vi/Vim家族最基本的特性:模式系统

为了能让第一篇做到「零基础」,我决定开始上图:

打开「TextEdit」之后的画面(「记事本」也是类似的)里你会看到一个光标在左上角跳动着等待着你输入,在输入文本之后按上下左右可以移动光标……一切都让人觉得很正常

然而打开Vim之后你会看到的是这样的画面:

好嘛,这不是一样的吗?!然而,如果你试着输入你会发现字母没有像你期望的那样跳出来,而且你会发现你都不知道如何退出这个软件(如果你不巧地在「终端」里打开了Vim)。

这都是由于刚刚提到的,Vim特有的:模式系统。详细可以参考这里,但是简单来说就是:

默认的状态普通模式按下键盘是对文本/光标的操作命令,比如hjkl是移动光标,dd删除本行,$跳跃到行末,G跳跃到文件末 等等;

在普通模式下按 i 进入输入模式:按键盘即为输入,「记事本」和「TextEdit」可以理解为永远在输入模式下;按 ESC 退回普通模式


在普通模式下按 : (冒号)进入命令模式:输入的内容会呈现在画面的最下方的冒号后,执行的是Vim的命令,按 ESC 退回普通模式。举例:

这些即是vi/Vim家族编辑器和其他编辑器最根本的区别,这一区别也狭义地回答了问题「什么是Vim」:以这种模式系统工作的文本编辑器即为Vim。

Vim有着大量的普通模式操作和命令,查看Vim Cheat Sheet可以感性地感知一下;

当然,Vim的强大绝对不可能是因为内置了操作,更主要的原因在于Vim的可定制性和可扩展性

一个经过定制的,正在高速生产的Vim(对,这个Vim跑在终端里):

来源

这句话概括Vim神奇之处的话在各种地方不断出现,下一篇我会尝试在「好理解」的基础上全方面解释可定制可扩展到底意味着 Vim拥有什么特点和能力,又为何格外强大。

编辑于 2015-09-04

文章被以下专栏收录

    一个有前途项目:Barm一己之力的巨作Vim的核心代码极难维护,而又有众多Bug不予修复;这里将随着NeoVim的进展,展示日用技巧并见证Vim在21世纪重生。