将寄存器与各种删除、复制、粘贴命令组合使用,能够大大提高编辑文本的效率。
在复制或删除文本时,可以使用"register
命令将文本放入指定的寄存器中。例如以下命令,将复制的文本放到寄存器a中,同时文本也会被放入未命名寄存器中。
"ayy
如果再使用相应的大写字母来指定寄存器,那么会将当前行内容追加到寄存器a中,这时该寄存器中就有了两行文本。
"Ayy
使用:registers name
命令,可以查看特定寄存器中的内容:
如果想要查看所有寄存中的内容,可以使用以下命令:
:registers
寄存器可以分为以下十种类型:
类别 | 符号 | 描述 |
---|---|---|
未命名寄存器 | " | 上一次复制或删除的文本 |
数字寄存器 | 0-9 | 文本复制和删除历史 |
行内删除寄存器 | - | 删除少于一行的文本 |
命名寄存器 | a-z,A-Z | 存放文本 |
只读寄存器 | % | 当前文件名 |
. | 最近插入的文本 | |
: | 最近执行的命令行 | |
轮换缓冲区寄存器 | # | 交替文件的名字 |
表达式寄存器 | = | 返回表达式结果 |
选择和拖拽寄存器 | * | 系统剪切板 |
+ | 系统剪切板(X11) | |
~ | 拖拽的文本 | |
黑洞寄存器 | _ | 彻底删除的文本 |
搜索模式寄存器 | / | 最近搜索模式 |
未命名寄存器(The Unnamed Register) 当使用y命令复制文本,或使用d、c、s、x等命令删除文本时,文本将自动被放入""未命名寄存器。即使你在复制或删除文本时,已经指定了寄存器(例如使用"xdd命令),这些文本也将同时被放入"x和""寄存器。
数字寄存器(The Numbered Registers) "0包含最近复制的文本;"1包含了最近删除或者修改的文本。区别在于:"0不断被复制的文本所覆盖;而在删除文本时,如果指定了寄存器或者文本小于一行,那么"1将不会被覆盖。数字寄存器1-9可以看作是删除历史, 你可以从中找到早先删除的文本。比如使用了三次dd
命令,那么这三行文本被分别存放在寄存器1,2,3中,可以通过命令"1P
,"2P
,"3P
将这些文本再粘贴回来。
行内删除寄存器(The Small Delete Register) 当删除文本少于一行时,内容将被放入"-寄存器,除非指定了其它寄存器。
命名寄存器(The Named Registers) 当文本被放入以小写字母命名的寄存器(例如"a)时,该寄存器原有的内容将被覆盖;而使用以大写字母命名的寄存器(例如"A)时,将会把文本追加到原有内容之后。
只读寄存器(The Read-Only Registers) 你只能从只读寄存器中粘贴内容,而不能放入文本。"%包含当前文件名;".包含最近插入的文本;":包含最近执行的命令行。
轮换文件寄存器(The Alternate file register) "#包含当前窗口轮换文件的名字。它影响CTRL-^的工作方式。
表达式寄存器(The Expression Register) 可以进行表达式计算并返回结果。在常规模式下,输入"=,就会在Vim底部显示以“=”开始的提示行,可以在其中输入表达式并按回车键确认。随后使用命令p
,可以将表达式的结果粘贴到文本中。例如在=
提示符后输入“5*5”并按回车,然后输入命令p,就可以将计算结果“25”插入文本中了。在插入模式下,点击Ctrl-R=快捷键,也可以进入=
提示行,输入表达式然后点击回车键,将计算结果插入到当前光标处。也就是说,不用离开插入模式,也无需额外执行粘贴命令,即可以完成表达式计算。在表达式寄存器中,不仅可以使用通常的算术运算符,还可以使用Vim特定的函数和运算符。例如通过表达式寄存器来得到环境变量的值(例如"=$HOME)。如果没有输入任何表达式而直接按回车键,那么Vim将执行最近使用过的表达式。
选择和拖拽寄存器(The Selection and Drop Registers) 有3个寄存器用于保存选中的文本:在Mac和Windows下,"*和"+,都用于访问系统剪切板;在Linux下,"+用于访问系统剪切板,而"*包含选中的文本。使用"+y
命令,可以将当前选中的文文本复制到系统剪切板中。而"+p
命令,则可以粘贴系统剪切板中的内容。通过剪切板寄存器,能够在不同的Vim编辑器或者是其他应用程序之间,进行文本交换。"~包含上次从其它应用程序拖拽到Gvim中的文本。
黑洞寄存器(The Black Hole Register) 任何放入"_中的文本都将不复存在。如果想要永久删除某些文本而不将其放入任何寄存器,那么可以使用黑洞寄存器。例如:命令dd将删除一行文本并将其放入寄存器"1中;而命令"_dd
则将该行文本放入黑洞寄存器中,这些文本也就永久消失了,而寄存器"1中的文本会保持不变。
搜索模式寄存器(Search Pattern Register) 当通过/
命令进行搜索时,所使用的模式将被自动放入"/寄存器。
命令:put会将寄存中的内容粘贴到指定的文本行后面。使用以下命令,可以将寄存器中的内容粘贴到第五行的后面:
:5put a
如果要将文本放在这一行的前面,可以用以下命令:
:5put! a
你也可以使用p命令,将x寄存中的文本粘贴到光标之后:
"xp
而P命令,则将x寄存中的文本粘贴到光标之前:
"xP
如果直接使用p
或P
命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容。
使用以下命令,可以粘贴上次插入的文本,方便你录入重复的内容:
".P
如果要粘贴系统剪切板中的内容,在Insert mode下可以利用快捷键Shift+Ins,而在Normal mode下,可以使用以下命令:
"*p
在插入模式下,点击CTRL-R然后输入寄存器的标识符,可以粘贴相应寄存器中的内容到当前位置。例如:
CTRL-R:将粘贴最近执行的命令;
CTRL-R/将粘贴最近使用的搜索模式;
CTRL-R0将粘贴"0寄存器的内容;
CTRL-Ra将粘贴"a寄存器的内容;
CTRL-R%将粘贴当前文件名。
使用以下命令,可以查看相关帮助信息:
:help i_CTRL-R