好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
Vim 的删除、复制与粘贴命令均需要使用 Vim 寄存器。通过在命令前加 "寄存器名
前缀的方式可指定寄存器,否则 Vim 将缺省使用无名寄存器。若想在 Vim 和操作系统外部程序间共享复制内容,则必须使用 Vim 系统剪贴板。
如想把当前单词复制到寄存器 a 中,可执行 "ayiw
;把当前整行文本剪切至寄存器 b 中,可以用命令 "bdd
;在此之后,既可以通过 "ap
粘贴来自寄存器 a 的单词,也可使用 "bp
命令粘贴来自寄存器 b 的整行文本。
这便是Vim寄存器的概念和用途。
Vim 缺省使用无名寄存器。无名寄存器用引号表示,例如,Vim 命令 ""p
完全等同于 p
命令。
x
、s
、d{motion}
、c{motion}
与 y{motion}
命令及其对应的大写命令都会覆盖 Vim 无名寄存器中的内容。
当使用 Vim 命令 y{motion}
时,复制的文本不但被拷贝到无名寄存器,而且也被拷贝到了复制专用寄存器中。Vim 复制专用寄存器用数字 0 标识。Vim 复制专用寄存器仅当使用 y{motion}
命令时才会被赋值。
以下的Vim教程动态图先通过命令 yiw
将光标当前所在位置的单词复制到寄存器(包括无名寄存器和复制寄存器)。
然后将光标移动到目标位置后,通过命令 diw
将光标所在位置的单词删除(剪切)到Vim无名寄存器中。
再通过命令 "0p
指定将复制专用寄存器(0)中内容粘贴到光标当前位置。
最后,通过命令 :reg "0
可以看到,无名寄存器保存的是通过 diw
删除的内容,复制寄存器保存的是 yiw
复制的内容。
Vim 提供了一组以 26 个英文字母命名的有名寄存器。用小写字母引用有名寄存器会覆盖该寄存器的原有内容,而用大写字母引用则会将新内容 追加 到该寄存器的原有内容之后。
Vim 黑洞寄存器是个有去无回的黑洞,可用下划线显式引用。例如, Vim 命令 "_d{motion}
会删除文本内容且不保存任何副本。
若想在 Vim 和操作系统外部程序间共享内容,则必须使用 Vim 系统剪贴板。Vim系统剪贴板通过 +
号显式引用。
假设在外部程序中用复制或剪切操作获取了目标文本,则在 Vim 命令模式下可以通过 "+p
命令将其粘贴到Vim编辑器中。
相反地,如果在 Vim 的复制或删除命令之前加入 "+
显式指定使用Vim系统剪贴板,则相应的文本将被捕获至系统剪贴板,退出Vim后,系统中的其他程序可以使用对应文本。