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

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

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


当前回答

黑洞寄存器_是寄存器中的/dev/null。

我在我的vimrc中使用它来允许删除单个字符而不更新默认寄存器:

noremap x "_x

并且在不更新默认寄存器的情况下以可视模式粘贴:

vnoremap p "_dP

其他回答

当我发现0寄存器时,我很高兴。如果你不将文本分配给特定的寄存器,那么它将被分配给0寄存器,并被保存在默认的“寄存器”中。0寄存器和' '寄存器之间的区别是0只填充被删除的文本,而默认寄存器也填充使用d/ d/ x/ x/ c/ c/ s/ s命令删除的文本。

当我想复制一些文本,删除一些东西并用复制的文本替换它时,我发现这很有用。举例如下:

Yank你想要复制的文本与y[动议]-这个文本保存在“和0寄存器 删除你想用d[动议]替换的文本-此文本保存在“寄存器 用“0p .”粘贴被拉拽的文本

其中“是为下一个命令使用寄存器的命令。

在最后一步,如果您要从默认寄存器粘贴(使用p),它将使用您刚刚删除的文本(可能不是您想要的)。

注意p或p是从默认寄存器中粘贴的。传统的等效方法是""p(或""p)和"0保存最后一次yank, "1保存最后一次删除或更改。

有关更多信息,请参阅:帮助寄存器。

我认为秘密的大师寄存器是表达式= register。它可以用于创建映射。

:inoremap  \d The current date <c-r>=system("date")<cr>

您可以将它与您的系统结合使用,或者从自定义VimL函数等获得响应。

或者只是一些特别的东西

<c-r>=35+7<cr>

在带@的命令中使用寄存器。例如:

echo @a
echo @0
echo @+

让他们来指挥:

let @a = 'abc'

现在ap将粘贴abc。

来自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窗口中为文本grep,而不必伸手去拿鼠标。

把文本 :!grep " < CTRL-R > 0 " < CR >