Vim知多少

Vim的官网

Vim最早在1991年由Bram Moolenaar发布,是Vi的一个改良版, 表示Vi IMproved.

Vi最早在1976年由Bill Joy发布。

Richard Stallman称Vi是魔鬼的编辑器(VI-VI-VI在罗马数字中表示兽名数目)。

Vi的支持者反讽Emacs是一个伟大的操作系统,只缺个体面的编辑器。两者有太多的往事不堪回首。

首页 » Vim » Learn Vimscript the Hard Way笔记

Learn Vimscript the Hard Way笔记

Learn Vimscript the Hard Way是一份很好的Vim脚本学习教材,该文档昵称为LVSHW。以下是我的笔记。

echo和echom的区别,后者的输出,可以记录在message中,并通过:messages查看。

Vim脚本的注释符号是"。

:set选项,如:se nu开启行号选项,:se nonu关闭行号选项。对于开关(on/off)类型的选项,可以使用选项切换语法(toggle),即如:se nu!,如果行号选项开启则关闭,若关闭则开启。输出选项的设置:se nu?

:se nu
:se nonu
:se nu!
:se nu?

基础映射方法。

:map - x

键入-即等同于键入x(删除一个字符)。同样我们可以建立其他映射,如:

:map - dd

键入-即等同于键入dd(删除当前行)。

这里有一个有趣的映射,键入空格即选中光标所在的那个单词:

:map <space> viw

这里使用了特殊符号<space>。类似的特殊符号还有很多,它们的格式形同<keyname>。

用Ctrl-d删除光标所在行:

:map <c-d> dd

将-映射为删除光标行并将其复制到下一行:

:map - dd<Esc>p

不同编辑状态下的映射(Modal Mapping)。在Normal模式下删除光标行的映射:

:nmap \ dd

在Visual模式下将选中的文本转为大写:

:vmap \ U

建立这么多映射后,我们可以通过:map查看所有的映射。

本节最后给了一个较为综合一点的映射:

:imap <c-d> <esc>ddi

这个映射的意思是在Insert状态下,通过Ctrl-d删除当前行。首先通过<esc>切换到Normal模式,再通过dd删除行,再通过i回到Insert模式。

严格映射(Strict Mapping)。首先看一个例子:

:nmap - dd
:nmap \ -

输入-将导致光标行被删除。这样的映射也许不是我们想要的。首先可以取消映射:

:nunmap -
:nunmap \

接下来理解下递归(Recursion)。测试一下这个映射:

:nmap dd 0jddk

一旦建立这个映射,并在Normal模式下输入dd,你将看到Vim疯狂的输入一个空行,直到你用Ctrl-c将它中断(此时可以用U恢复到命令之前的文本状态)。因为dd被递归解释了。

分享

0