vim剪切和粘贴历史

use*_*941 70 vim

当我在 vim 中“剪切”时,我相信有一些寄存器可以保存我最近剪切的所有内容的历史记录。我如何访问这些寄存器?

例如,假设我连续剪切这些单词中的每一个

  • '你好'
  • '世界'
  • '和'
  • '维姆'

请注意,我实际上并没有将这些编辑保存到特定的寄存器中,我只是连续使用了四次 'd'。

njd*_*njd 115

:help 注册

命令显示有 10 个编号的寄存器 ( "0to "9)。

注册"0是最近被拉走的东西;register"1有最近删除的文本,注册"2以前的删除,"3有之前的删除,依此类推。

如果您依次删除每一行,寄存器"1"2"3"4将含有“Vim的”,“和”,“世界”和“你好”,分别。

您可以使用:reg(或:registers) 命令验证这一点:

:reg
""   Vim^J
"1   Vim^J
"2   And^J
"3   World^J
"4   Hello^J
Run Code Online (Sandbox Code Playgroud)

因此,在一次删除四行之后,您可以使用以下命令恢复第二行(“世界”)

"3p
Run Code Online (Sandbox Code Playgroud)

因为这是最近的第三次删除。

  • 这个答案遗漏了一个重要的细节:只有一行或多行的删除才会以这种方式存储在历史记录中。如果您按照问题中 OP 描述的方式删除单词(使用“d”四次,而不是“dd”),那么除了最后删除的单词之外的所有单词都将丢失。 (4认同)
  • 各位大神,作为一名维密者,您每天都在学习新东西。这很棒。谢谢,@njd。 (3认同)
  • 太棒了;但是,我想要最新的“猛拉”文本吗? (2认同)
  • 阅读`:help registers`时还要注意特殊寄存器,尤其是“*”和“+”。_很有用。 (2认同)

Al.*_*Al. 8

除了 njd 的回答,这可以通过YankRing插件来简化。除了更容易浏览以前的 yanks 之外,您还可以配置一些键,以允许您从“堆栈”中弹出以前的 yanks。这允许您执行以下操作:

yy    " Copy first line
yy    " Copy second line
yy    " Copy third line
yy    " Copy fourth line
" Assumes you've mapped ,p to be the pop command: choose your preferred key or key-combination
,p    " Paste fourth line and pop it off the Yank Ring
,p    " Paste third line and pop it off the Yank Ring
,p    " Paste second line and pop it off the Yank Ring
,p    " Paste first line and pop it off the Yank Ring
Run Code Online (Sandbox Code Playgroud)

  • 你能添加如何映射`,p`来弹出之前的yank吗? (4认同)