Vim中寄存器的使用 03 June 2013
Vim中的寄存器(register)作用和windows中的剪贴板类似,不过Vim中的寄存器不止一个,有不同的类别,有不同的用处。
例如,"ayy
命令会将yy
命令的结果放入寄存器a中,也就是复制该行文本到寄存器a中。然后"ap
命令则表示粘贴寄存器a中的内容。
具体而言,Vim中常用的寄存器包括:
-
默认寄存器(Unamed Register)
""
又称无名寄存器,当使用y、d、c、s、x命令时,对应的文本将自动放入该寄存器。即使在复制或删除文本时,已经显示地指定了别的寄存器(例如
"ayy
命令),这些文本仍然会同时放入无名寄存器。 -
数字寄存器(Numbered Register)
"0
至"9
-
寄存器
"0
默认存放最近复制的文本。 -
寄存器
"1
默认存放最近删除的文本,除非删除内容少于一行。 -
寄存器
"2
默认存放倒数第二次删除的文本,除非删除内容少于一行。 -
寄存器
"3
到"9
依次类推。
寄存器
"0
的一个用处是当你想拷贝A替换B的时候。如果直接yw
拷贝A,然后dw
删除B,再粘贴p
的话,是不行的,因为删除命令也会把删除的文本放到默认寄存器中。此时,可以就使用"0p
命令来粘贴刚才复制的文本了。 -
-
短删除寄存器(Small Delete Register)
"-
当删除少于一行的文本时,这些文本默认将存放于此。
-
命名寄存器(Named Register)
"a
至"z
,"A
至"Z
也称字母寄存器,这些寄存器不会自动填充,是提供给用户使用的。注意,大小写是一一对应的,小写的表示替换原寄存器的内容,而大写的则表示追加到原寄存器内容中。
-
只读寄存器(Read-only Register)
有4个寄存器是只读的,你只能读这些寄存器,不能写这些寄存器。
-
"%
包含当前文件名; -
"#
包含交替文件名; -
".
包含最近插入的文本; -
":
包含上次执行的命令行;
-
-
黑洞寄存器(Black Hole Register)
"_
类似于linux中的/dev/null的作用,任何放入该寄存器中的文本都将丢弃。黑洞寄存器也可以用于解决上文提到的“复制、删除、粘贴问题”,在删除的时候使用
"_d
命令将删除的文本扔至黑洞即可。 -
选择和拖拽寄存器(Selection and Drop Register)
"*
"+
"~
"*
寄存器用户访问系统剪贴板,在windows下和"+
寄存器相同;在Linux下,
"+
寄存器包含选中的文本,而"*
寄存器包含复制的文本;而
"~
寄存器包含从其它应用程序拖拽到Vim中的文本。使用
"*
寄存器和"+
寄存器,我们就可以方便的在Vim和外部应用程序中复制粘贴了。我们还可以设置set clipboard=unamed
或set clipboard=unamedplus
使得所有拷贝删除操作都直接使用系统剪贴板,更加方便。需要注意的是,如果执行:echo has(‘clipboard’)返回0,表示当前Vim版本不支持访问系统剪贴板,需要重新编译或更换版本,这一般需要系统有GUI的安装。
-
搜索模式寄存器(Search Pattern Register)
"/
"/
寄存器包含上次文本搜索的命令。 -
表达式寄存器(Expression Register)
"=
输入
"=
命令后,Vim底部会出现一个以”=”开头的提示行,可以在这里输入表达式例如5*27
,按回车确认后,即可使用p
粘贴表达式的取值。另外,输入的表达式不仅可以包含通常的算术运算符,还可以使用Vim特定的函数和运算符等,例如
"=$PATH
得到环境变量PATH的值。
使用:register
或:reg
命令可以查看当前已定义的所有寄存器的值。使用:help registers
命令可以查看相关帮助。
reference
http://blog.sanctum.geek.nz/advanced-vim-registers/
http://blah.blogsome.com/2006/04/27/vim_tut_register/
本文出自夜惊心的博客,转载请保留出处blog comments powered by Disqus