/ 编程

Vim 寄存器

Vim 的 d(delete), y(yank), p(put) 这几个命令,可以近似地对应操作系统剪贴板的剪切、复制、粘贴操作。Vim 的“剪贴板”比操作系统的剪贴板要强大,在 Vim 中不叫“剪贴板”,而叫做“寄存器(register)”。Vim 有不止一个寄存器用于复制/粘贴操作,下面是一些常见用法和专用寄存器的作用。

在普通模式使用 :register 查看当前有哪些寄存器。使用 "{register}(双引号+寄存器名称)来指定使用哪一个寄存器。

默认(无名)寄存器

常用的 dd, yy 删除或者复制一行,这里没有指定寄存器, Vim 就默认使用无名寄存器 "",这一行内容放在了无名寄存器里。然后按下 p 键,同样因为没有指定寄存器,就把无名寄存器里地内容,也就是刚刚通过 dd/yy 删除/复制的一行粘贴出来。""p 作用跟只按下 p 作用一样,只是显式地用了无名寄存器。

指定名称的寄存器

通过 "a 指定名为 a 的寄存器,可以使用 ‘a-z’ 26 个字母中的一个作为寄存器的名字,这里是用 a 作为例子。假设某一行上上仅有 hello world 几个字符,光标处于行首,Vim 处于普通模式。

  1. 通过按键 "ayiwhello 这个词放到寄存器 a
  2. j 到下一行(或移动到其他位置),按键 "ap 就把 hello 粘贴到光标处。

回到 hello world 所在的行,光标移动到 world 上,按键 "Ayiw,使用了大写 A 作为寄存器名,这里并不创建新的寄存器,而是把 world 追加到了寄存器 a

使用其他字母命名的寄存器遵循同样地规则,删除或复制时,以大写字母引用某个寄存器,就是把新内容追加到原有的以小写字母命名的寄存器。

专用寄存器

除了上面提到的无名寄存器和以字母命名的寄存器,Vim 还有些其他的专用寄存器。

  • "0 是复制专用寄存器,比如 yy 时,复制的这一行被放到无名寄存器里,也放到 "0 寄存器,如果又 dd 删除了其他行,无名寄存器就被覆盖,而 "0 寄存器里仍然是之前复制的一行。
  • "1"9 这 9 个数字名称的寄存器,保存最近 9 次删除的
  • "+ 系统剪贴板,可以 "+p 把系统剪贴板里的内容粘贴过来,可以 `“+yy” 把当前行复制到系统剪贴板。
  • "* Linux 中 X11 的 primary 剪贴板。在 X11 环境中,通过鼠标高亮选择,鼠标中键即可把之前高亮选中的内容粘贴出来,就是使用的这个剪贴板。通过 "* 就可以在 Vim 里对这个剪贴板进行操作。

在 windows 和 mac 中,没有 X11,"*"+ 都是系统剪贴板,所以可以混用 "*"+ 寄存器。