Vim中的寄存器(register)作用和windows中的剪贴板类似,不过Vim中的寄存器不止一个,有不同的类别,有不同的用处。

例如,"ayy命令会将yy命令的结果放入寄存器a中,也就是复制该行文本到寄存器a中。然后"ap命令则表示粘贴寄存器a中的内容。

具体而言,Vim中常用的寄存器包括:

  1. 默认寄存器(Unamed Register) ""

    又称无名寄存器,当使用y、d、c、s、x命令时,对应的文本将自动放入该寄存器。即使在复制或删除文本时,已经显示地指定了别的寄存器(例如"ayy命令),这些文本仍然会同时放入无名寄存器。

  2. 数字寄存器(Numbered Register) "0"9

    • 寄存器"0默认存放最近复制的文本。

    • 寄存器"1默认存放最近删除的文本,除非删除内容少于一行。

    • 寄存器"2默认存放倒数第二次删除的文本,除非删除内容少于一行。

    • 寄存器"3"9依次类推。

    寄存器"0的一个用处是当你想拷贝A替换B的时候。如果直接yw拷贝A,然后dw删除B,再粘贴p的话,是不行的,因为删除命令也会把删除的文本放到默认寄存器中。此时,可以就使用"0p命令来粘贴刚才复制的文本了。

  3. 短删除寄存器(Small Delete Register) "-

    当删除少于一行的文本时,这些文本默认将存放于此。

  4. 命名寄存器(Named Register) "a"z"A"Z

    也称字母寄存器,这些寄存器不会自动填充,是提供给用户使用的。注意,大小写是一一对应的,小写的表示替换原寄存器的内容,而大写的则表示追加到原寄存器内容中。

  5. 只读寄存器(Read-only Register)

    有4个寄存器是只读的,你只能读这些寄存器,不能写这些寄存器。

    • "%包含当前文件名;

    • "#包含交替文件名;

    • ".包含最近插入的文本;

    • ":包含上次执行的命令行;

  6. 黑洞寄存器(Black Hole Register) "_

    类似于linux中的/dev/null的作用,任何放入该寄存器中的文本都将丢弃。黑洞寄存器也可以用于解决上文提到的“复制、删除、粘贴问题”,在删除的时候使用"_d命令将删除的文本扔至黑洞即可。

  7. 选择和拖拽寄存器(Selection and Drop Register) "* "+ "~

    "*寄存器用户访问系统剪贴板,在windows下和"+寄存器相同;

    在Linux下,"+寄存器包含选中的文本,而"*寄存器包含复制的文本;

    "~寄存器包含从其它应用程序拖拽到Vim中的文本。

    使用"*寄存器和"+寄存器,我们就可以方便的在Vim和外部应用程序中复制粘贴了。我们还可以设置set clipboard=unamedset clipboard=unamedplus使得所有拷贝删除操作都直接使用系统剪贴板,更加方便。

    需要注意的是,如果执行:echo has(‘clipboard’)返回0,表示当前Vim版本不支持访问系统剪贴板,需要重新编译或更换版本,这一般需要系统有GUI的安装。

  8. 搜索模式寄存器(Search Pattern Register) "/

    "/寄存器包含上次文本搜索的命令。

  9. 表达式寄存器(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