Vim 的删除、复制与粘贴命令均需要使用Vim寄存器。通过在命令前加 "寄存器名 前缀的方式可指定寄存器,否则Vim将缺省使用无名寄存器。若想在Vim和操作系统外部程序间共享复制内容,则必须使用Vim系统剪贴板。

如想把当前单词复制到寄存器 a 中,可执行 "ayiw;把当前整行文本剪切至寄存器 b 中,可以用命令 "bdd;在此之后,既可以通过 "ap 粘贴来自寄存器 a 的单词,也可使用 "bp 命令粘贴来自寄存器 b的整行文本。

这便是Vim寄存器的概念和用途。

一、无名寄存器

Vim缺省使用无名寄存器。无名寄存器用引号表示,例如,Vim命令 ""p 完全等同于 p 命令

xsd{motion}c{motion}y{motion} 命令及其对应的大写命令都会覆盖Vim无名寄存器中的内容。

注意d{motion}表示Vim命令 d 后面跟任意动作命令,下同。

二、复制专用寄存器

当使用Vim命令y{motion}时,复制的文本不但被拷贝到无名寄存器,而且也被拷贝到了复制专用寄存器中。Vim复制专用寄存器用数字 0 标识。Vim复制专用寄存器仅当使用 y{motion} 命令时才会被赋值

以下的Vim教程动态图先通过命令 yiw 将光标当前所在位置的单词复制到寄存器(包括无名寄存器和复制寄存器)

然后将光标移动到目标位置后,通过命令 diw 将光标所在位置的单词删除(剪切)到Vim无名寄存器中

再通过命令 "0p 指定将复制专用寄存器(0)中内容粘贴到光标当前位置

vim寄存器

最后,通过命令 :reg "0 可以看到,无名寄存器保存的是通过 diw 删除的内容,复制寄存器保存的是 yiw 复制的内容

三、有名寄存器

Vim 提供了一组以 26 个英文字母命名的有名寄存器。用小写字母引用有名寄存器会覆盖该寄存器的原有内容,而用大写字母引用则会将新内容 追加 到该寄存器的原有内容之后

四、黑洞寄存器

Vim黑洞寄存器是个有去无回的黑洞,可用下划线显式引用。例如, Vim命令 "_d{motion} 会删除文本内容且不保存任何副本

五、系统剪贴板

若想在Vim和操作系统外部程序间共享内容,则必须使用Vim系统剪贴板。Vim系统剪贴板通过 + 号显式引用

假设在外部程序中用复制或剪切操作获取了目标文本,则在Vim命令模式下可以通过 "+p 命令将其粘贴到Vim编辑器中。

相反地,如果在Vim的复制或删除命令之前加入 "+ 显式指定使用Vim系统剪贴板,则相应的文本将被捕获至系统剪贴板,退出Vim后,系统中的其他程序可以使用对应文本