我只知道使用寄存器的一个实例是通过CtrlR*,从中我从剪贴板粘贴文本。

寄存器的其他用途是什么?如何使用它们?

你所知道的关于VI寄存器的一切(让我们关注VI 7.2)——分享给我们。


当前回答

一个很大的混淆来源是默认寄存器”。了解它的工作方式是很重要的。如果在大多数情况下避免使用默认寄存器,情况会好得多。来自Vim文档的解释:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

所以默认寄存器实际上是指向最后使用的寄存器的指针。当你删除或拉取某个东西时,这个寄存器将指向其他寄存器。您可以通过检查寄存器来验证这一点。总有另一个寄存器与默认寄存器完全相同:yank寄存器(“0”),第一个删除寄存器(“1”),小删除寄存器(“-”)或任何其他用于删除或删除的寄存器。

唯一的例外是黑洞寄存器。Vim doc说:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

通常,直接使用“0”、“-”和“1-”9默认寄存器或命名寄存器会更好。

其他回答

我最喜欢的寄存器是':'寄存器。在正常模式下运行@:可以重复之前运行的ex命令。

所以我们可以用MY_commandXXXXX来验证一些命令,然后把MY_commandXXXXX放在vimrc中

来自vim的帮助页面:

CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
        Insert the contents of a numbered or named register.  Between
        typing CTRL-R and the second character '"' will be displayed
        <...snip...>
        Special registers:
            '"' the unnamed register, containing the text of
                the last delete or yank
            '%' the current file name
            '#' the alternate file name
            '*' the clipboard contents (X11: primary selection)
            '+' the clipboard contents
            '/' the last search pattern
            ':' the last command-line
            '-' the last small (less than a line) delete
            '.' the last inserted text
                            *c_CTRL-R_=*
            '=' the expression register: you are prompted to
                enter an expression (see |expression|)
                (doesn't work at the expression prompt; some
                things such as changing the buffer or current
                window are not allowed to avoid side effects)
                When the result is a |List| the items are used
                as lines.  They can have line breaks inside
                too.
                When the result is a Float it's automatically
                converted to a String.
        See |registers| about registers.  {not in Vi}
        <...snip...>

一个很大的混淆来源是默认寄存器”。了解它的工作方式是很重要的。如果在大多数情况下避免使用默认寄存器,情况会好得多。来自Vim文档的解释:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

所以默认寄存器实际上是指向最后使用的寄存器的指针。当你删除或拉取某个东西时,这个寄存器将指向其他寄存器。您可以通过检查寄存器来验证这一点。总有另一个寄存器与默认寄存器完全相同:yank寄存器(“0”),第一个删除寄存器(“1”),小删除寄存器(“-”)或任何其他用于删除或删除的寄存器。

唯一的例外是黑洞寄存器。Vim doc说:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

通常,直接使用“0”、“-”和“1-”9默认寄存器或命名寄存器会更好。

Q5记录编辑到寄存器5(下一个q停止记录) :reg显示所有寄存器和其中的任何内容 @5执行注册5宏(已录制的编辑)

一个很酷的技巧是使用“1p粘贴最后删除/更改(,然后使用。重复粘贴后续删除的内容。换句话说,“1p…基本上相当于"1p"2p"3p"4p。

你可以用它来倒序一些行: dddddddddd“1 p…