是。点击Ctrl- R然后"。如果您在抽取的内容中有文字控制字符,请使用Ctrl- R,Ctrl- O, ".
这是对使用寄存器可以做什么的解释。你可以用寄存器做什么是非凡的,一旦你知道如何使用它们,你就不能没有它们。
寄存器基本上是字符串的存储位置。Vim有许多寄存器以不同的方式工作:
0(yank寄存器:当你y在正常模式下使用时,没有指定寄存器,被拉动的文本也会到达默认寄存器),
1to 9(移位删除寄存器,当你使用诸如cor之类的命令d,删除的内容进入寄存器1,寄存器1中的内容进入寄存器2 等),
"(默认寄存器,也称为未命名寄存器。这是"进来的地方Ctrl- R,"),
a以z供自己使用(大写A来Z是附加到相应的寄存器)。
_(就像/dev/null(Unix)或NUL(Windows)一样,你可以写它但它被丢弃了,当你从中读取它时,它总是空的),
- (小删除寄存器),
/(搜索模式寄存器,当你看文字更新了/,?,*或#例如;你也可以写信给它动态地改变搜索模式),
:(通过Q或:只读存储最后一个VimL类型命令),
+和*(系统剪贴板寄存器,您可以写入它们来设置剪贴板并从中读取剪贴板内容)
请参阅:help registers完整参考。
您可以随时使用它:registers来显示所有寄存器的内容。此命令的同义词和缩写词是:display,:reg和:di。
在插入或命令行模式下,Ctrl- R加上寄存器名称,插入该寄存器的内容。如果你想按字面插入它们(没有自动缩进,没有控制字符的转换,比如0x08退格等),你可以使用Ctrl- R,Ctrl- O,寄存器名称。请参阅:help i_CTRL-R以下段落以获取更多参考。
但是您也可以执行以下操作(我可能忘记了寄存器的许多用途)。
在正常模式下,点击":p。您在vim中使用的最后一个命令将粘贴到缓冲区中。
让我们分解:"是一个普通模式命令,它允许您选择在下一次抽取,删除或粘贴操作期间使用的寄存器。因此":选择冒号寄存器(存储最后一个命令)。然后p是你已经知道的命令,它会粘贴寄存器的内容。
比照 :help ",:help quote_:
你正在编辑一个VimL文件(例如你的.vimrc),并希望现在执行几个连续的行:yj:@"Enter。
在这里,yj将默认寄存器(也称为未命名的寄存器)拉出当前和下一行(这是因为j是线性运动,但这超出了本答案的范围)。然后:@Ex命令播放存储在作为参数给出的寄存器中的Ex命令,并且"是您如何引用未命名的寄存器。另请参阅此答案的顶部,这是相关的。
不要混淆"这里使用的(这是一个寄存器名称)与"上一个例子中的混淆,这是一个普通模式命令。
比照 :help :@和:help quote_quote
在插入模式下将最后一个搜索模式插入到文件中,或者使用Ctrl- R,在命令行中插入/。
比照 :help quote_/,help i_CTRL-R
推论:保持搜索模式但添加替代方案:/ Ctrl- R, / \|alternative.
你在视觉模式中在一行中间选择了两个单词,然后将它们拉出来y,它们位于未命名的寄存器中。现在要打开略低于你在哪一个新的生产线,用这两个词::pu。这是简写:put "。:put与许多Ex命令一样,该命令仅适用于行。
比照 :help :put
你也可以做到::call setreg('"', @", 'V')然后p。的setreg功能设定,其名称被给定为第一个参数(字符串)的寄存器,与所述第二参数的内容进行初始化(并且可以使用寄存器作为变量的名称@x,其中x是在VimL寄存器名),和将其转换为第三个参数中指定的模式,V对于linewise,^V对于按字段和字面,没有任何内容。
比照 :help setreg()。反向功能是getreg()和getregtype()。
如果你用qa... 记录了一个宏q,那么它:echo @a会告诉你你输入了什么,@a并将重放宏(可能你知道那个,非常有用,以避免重复的任务)
比照 :help q,help @
上一个例子的推论:如果你8go在剪贴板中,那么@+将把剪贴板内容作为宏播放,从而转到你文件的第8个字节。实际上这几乎适用于每个寄存器。如果您最后插入的字符串dd处于插入模式,那么@.将(因为.寄存器包含最后插入的字符串)删除一行。(Vim文档是错在这方面,因为它指出寄存器#,%,:并且.将只与工作p,P,:put和Ctrl- R)。
比照 :help @
不要混淆:@(从寄存器播放Vim命令的命令)和@(从寄存器播放正常模式命令的普通模式命令)。
值得注意的例外是@:。命令寄存器不包含初始冒号,也不包含最终的回车符。但是在正常模式下,@:将执行您所期望的操作,将寄存器解释为Ex命令,而不是尝试在正常模式下播放。因此,如果您的最后一个命令是:e,寄存器包含e但@:将重新加载文件,而不是结束单词。
比照 :help @:
在运行之前显示您将在正常模式下执行的操作:@='dd' Enter。一旦你按下=键,Vim就会切换到表达式评估:当你输入一个表达式并点击时Enter,Vim会计算它,结果就像一个寄存器内容。当然寄存器=是只读的,一次性的。每次开始使用它时,都必须输入新的表达式。
比照 :help quote_=
推论:如果您正在编辑命令,并且您意识到您需要在命令行中插入当前缓冲区中的某一行:不要按Esc!使用Ctrl- R =getline(58) Enter。之后,您将返回命令行编辑,但它已插入第58行的内容。
手动定义搜索模式: :let @/ = 'foo'
比照 :help :let
请注意,这样做,您无需/在模式中转义。但是,当然,您需要将所有单引号加倍。
副本开始的所有行foo,事后包含所有线bar到剪贴板,链条这些命令:qaq(复位一个寄存器中存储在其内部的空宏), ,:g/^foo/y A,。:g/bar/y A:let @+ = @a
使用大写寄存器名称使寄存器在附加模式下工作
更好,如果Q没有被重新映射mswin.vim,启动Ex模式Q,链接那些实际上更好地称为“Ex命令”的“冒号命令”,并通过键入返回到正常模式visual。
比照 :help :g,:help :y,:help Q
将文件双倍空间::g/^/put _。这使得黑洞寄存器的内容(在读取时为空,但可写,表现得像/dev/null)在每一行之后的行(因为每行都有一个开头!)。
foo在每行之前添加一行::g/^/-put ='foo'。这是表达式寄存器的巧妙使用。这里-是.-1(cf. :help :range)的同义词。由于:put将文本放在行之后,您必须明确地告诉它对前一行动作。
将整个缓冲区复制到系统剪贴板::%y+。
比照 :help :range(对于%部分)和:help :y。
如果您错误地记录了一个宏,则可以键入:let @a=' Ctrl- R =replace(@a,"'","''",'g') Enter '并进行编辑。这将修改存储在寄存器中的宏的内容,a这里显示了如何使用表达式寄存器来执行此操作。
如果你这样做dddd,你可能会做uu以撤消。有了p你可以得到最后删除的行。但实际上你也可以@1通过寄存器恢复最多9次删除@9。
更好的是,如果你这样做"1P,那么.在正常模式下会播放"2P,依此类推。
比照 :help .和:help quote_number
如果要在插入模式下插入当前日期:Ctrl- R=strftime('%y%m%d')Enter。
比照 :help strftime()
再次,可能令人困惑的是:
:@ 是一个命令行命令,它将寄存器的内容解释为vimscript并将其作为源代码
@ 在正常模式命令中,将寄存器的内容解释为正常模式击键(除非使用:寄存器,包含上次播放的命令而没有初始冒号:在这种情况下,它会重放命令,就好像您还重新键入冒号和最后的回报键)。
" 在普通模式命令中,它可以帮助您选择一个用于猛拉,粘贴,删除,更正等的寄存器。
" 也是一个有效的寄存器名称(默认或未命名的寄存器),因此可以作为期望寄存器名称的命令的参数传递