技巧61-深入理解Vim寄存器

  • 引用一个寄存器
  • Vim的删除、复制与粘贴命令都会用到众多寄存器中的某一个。
  • 可以同时给命令加"{register}前缀的方式指定要用的寄存器。若不指明,Vim将缺省使用无名寄存器。
  • Vim 剪切复制与粘贴对应的术语:delete,yank与put。

一些寄存器的例子

  • 把当前单词复制到a寄存器中
"ayiw
  • 把当前整行文本剪切至寄存器b中。
"bdd
  • 把b寄存器的内容粘贴出来
"bp

无名寄存器("")

  • 倘若没有指定要使用的寄存器,Vim将缺省使用无名寄存器。

  • 无名寄存器用双引号表示(:h quote_quote)。

  • ""p等同于p

  • x、s、d{mition}、c{motion}、与y{motion}命令(以及它们对应的大些命令)都会覆盖无名寄存器中的内容。

  • x和d{motion}应该被理解为剪切命令更合适,它们会覆盖无名寄存器的内容。

复制专用寄存器("0)

  • 当使用y{motion}寄存器时,要复制的文本不仅会被拷贝到无名寄存器中,而且也被拷贝到了复制专用寄存器中,后者可以用数字0加以引用。(:h quote0)
  • 复制专用寄存器,仅当使用y{motion}命令时才会被赋值。
  • 使用 "0P 复制出复制专用寄存器中的内容。

查看寄存器的内容

  • 查看所有寄存器的内容
:reg
  • 查看复制专用寄存器的内容
:reg "0

有名寄存器("a-"z)

  • 查看a寄存器内容
reg a

黑洞寄存器

  • 黑洞寄存器可以用下划线引动它。
  • 如果只想删除文本却不想覆盖无名寄存器中的内容时,此命令很官用。

系统剪贴板("+) 与选择专用寄存器("*)

  • Vim的加号寄存器与系统剪贴板等效,可用+号引用。
  • "+p命令将其粘贴到Vim内部。
  • 插入模式下用Ctrl-r+将其粘贴到Vim内部。
  • 如果在Vim的复制或删除命令之前加入"+,相应的文本将被捕获至系统剪切板。
  • X11视窗系统支持另一种被叫做主剪切板(primary)的剪贴板,它保存着上次被高亮选中的文本,可以用鼠标中键把他们粘贴出来。
  • Vim的星好寄存器对应主剪贴板,可以用*号加以引用。
  • "+ X11剪贴板,用剪切、复制与粘贴命令操作。
  • "* X11主剪贴板,用鼠标中键操作。
  • X11剪贴板的功能可在编译Vim时被激活或禁用。
  • 运行:version命令,然后找到xterm_clipboard关键字,如果前面有个减号,就表示不支持。

其它寄存器

  • 可以显式地使用删除与复制命令来设置有名、无名以及复制专用寄存器的内容。
  • 只读寄存器:Vim还提供了几组可被隐式赋值的寄存器。
"% 当前文件名
"# 轮换文件名
". 上次插入的文本
": 上次执行的Ex命令
"/ 上次查找的模式
  • 以技术上讲,"/寄存器并非只读,可以用:let命令对其进行显式赋值。