高级Vim寄存器

用Vim也很久了,翻译这篇有用的文章,大家共同进步。

原文:http://blog.sanctum.geek.nz/advanced-vim-registers/


高级Vim寄存器

寄存器是Vim用于临时保存的地方。通常我们使用的是26个字母的命名寄存器。比如,要把一系列的 键盘操作记录到寄存器a中,你可能会使用qa,然后以q结束;下次重新操作这些击键记录使用@a

文本Buffer也可以存放的寄存器中。在任何会使用寄存器的操作前按"a,比如 cdy

  • "ayy —— 读取当前行到寄存器a中
  • "bP —— 粘贴寄存器b的内容到当前行
  • "cc3w —— 修改3个单词,把修改前的单词存放于寄存器c中

像Vim其它内容一样,后面还有大量技巧有待探索。

这里我们没有讨论*,+和~寄存器,它们主要涉及系统的剪贴板。 我们只讨论在Vim会话中的寄存器。所以这些都在:help registers文档中有详细说明。

大写寄存器

Yank(抱歉,不知道这个怎么翻译)和删除文本通常会替换之前寄存器中的内容。 一些特殊情况我们可能希望往后增加,比如要把某些行复制到另一文件中。

  • "ayy —— 用当前行替换寄存器a中的内容
  • "Ayy —— 新增当前行到寄存器a中

所有的命名寄存器都支持这一特性。宏也可以通过这种方式添加击键。

查看寄存器中的内容

:registers

未命名寄存器

未命名寄存器是所有操作都会使用的,无论你是否已指定了命名寄存器。 比如,你要粘贴上一次的操作,可以使用""p;执行上一个击键,可以使用 @"。(未命名寄存器可以看作是"寄存器,但你常常可以省略其,比如 ""p,几乎所以人者直接使用p

黑洞寄存器

所以操作都会在默认未命名寄存器中,除非使用_寄存器。

举个例子,假设用3dd删除了3行,想在另一地方粘贴;但在做之前, 又想删除另一,使用"_dd就可以保留上次删除的内容。

数字寄存器

0-9寄存器被称为“历史记录”寄存器。寄存器0永远保存上一次yank的文本,没有删除的文本。你可以用它在yank之后再删除操作多次,最后用"0p粘贴上次 复制的内容。

1-9寄存器是保存的是删除的内容。1是最近的,2是其次,以此类推。

The small delete register

This read-only register, referenced by "-, stores any text that you deleted or changed that was less than one line in length, unless you specifically did so into some other named register. So if you just deleted three characters with 3x, you’ll find it in here.

Last inserted text register

The read-only register ". contains the text that you last inserted. Don’t make the mistake of using this to repeat an insert operation, though; just tap . for that after you leave insert mode, or have the foresight to prepend a number to your insert operation;
for example, 6i.

文件名寄存器

%是中储存的是当前的文件名,#则是包含轮换文件名。

命令寄存器

:寄存器中保存了上次执行的命令。通常只有在需要把命令粘贴到文本中才使用。

搜索寄存器

/是只读寄存器,保存上次搜索的匹配模式。最常见的用法是在命令行中使用上次搜索字符串Ctrl-R /。(顺便提一下,在Command模式下,通过 Ctrl-R
寄存器名
访问寄存器,最常用的是Ctrl-R w粘贴光标下的单词)

表达式计算寄存器

Vim自带的计算器想必很少有人知道。在Normal模式下,输入"=2+3, 2+3的结果5就存放在未命名寄存器中,再按p就粘贴上了。在命令行模式下Ctrl-R也可以使用。

Comments are closed.