Vim粘贴 - 滚动浏览以前被扯过的文本

Ste*_* Lu 14 vim

我正在尝试提高Vim中粘贴功能的可用性,因为太多不同的删除操作(事实上我确实认为它们都是它们)也会被移动到粘贴缓冲区.

这意味着我不再能够删除某些文本,我想要粘贴到某个地方,清理一些东西,然后再粘贴.我不知道为什么这是我喜欢做的顺序,但我不打算改变它.

在返回清理之前,我必须"原子地"进行移动,否则我会得到令人沮丧的逗号或括号或空格.哦,我知道我之所以按照其他顺序这样做的原因.它只是更有效率.我不必移动到目的地,然后返回清理,然后再回去.

如何改善这个?我的建议是一个插件,可用于在事后增加粘贴操作.点击p,看到它粘贴了一个无用的短暂删除的字符,并且此时(粘贴操作后立即)我们的插件将允许一个键循环通过以前删除已经删除的寄存器,就地更新我们的粘贴.

通过这种方式,我可以删除我想要的所有内容,而且我实际上能够快速提取任何最近删除的项目,只要它是一个连续的段.当然,使用视觉选择和删除进行设置很容易.这使易用性具有特异性,因为我不再需要记住指定一些特定的命名寄存器来用于特定的粘贴.

特别是,应该有一个堆栈,yanks和deletes都会累积进去,后来在使用单个绑定进行粘贴时会快速遍历.

那里有插件吗?

glt*_*lts 24

你对编号寄存器(:h quote_number)有点困惑.

只有一个抽牌注册,就是这样"0.

单独从有九个号删除寄存器"1"9.它们作为队列填充,最近的删除位于顶部.

对于删除的寄存器"1"9Vim有你所要求的内置功能:你可以粘贴"1p,如果它是不是你要找的内容可以重复u. u. u.通过寄存器切换"2,"3,"4等,直到你找到了合适的人.此行为记录在:h redo-register.

滚动浏览以前被拉动的文本通常使用插件完成,这是我所知道的最受欢迎的插件

  • YankRing.vim,"保持以前的猛拉,变化和删除的历史",以及
  • yankstack,"emacs的轻量级实现'为vim杀死环".


ham*_*mar 5

为什么不使用命名寄存器?例如,使用"ayyank注册a,然后"ap再次粘贴它,并且在此期间它不会受到正常删除等的破坏.

  • 正确的。*我在问题中解决了这个问题。*考虑到这至少是六次额外的击键,“shift”+“”+“a”两次。所有不同的钥匙。按照特定的顺序。这永远不会很快。猛拉已经输入到以数字命名的寄存器中。只需要一种方法来循环它们。 (2认同)

rom*_*inl 5

[l]orem ipsum dolor sit amet

    yiw yanks "lorem" in @" and @0

lorem [i]psum dolor sit amet

    daw deletes "ipsum " into @", @0 still contains "lorem"

lorem dolor [s]it amet

    ciwfoo deletes "sit" into @" and inserts "foo", @0 still contains "lorem"
Run Code Online (Sandbox Code Playgroud)

因为 register0仍然包含您猛拉 ( lorem) 的内容,即使在多次c, d, 之后s,执行操作"0p也会始终粘贴,lorem直到您明确猛拉其他内容为止。

我的例子只涉及 Vim 所谓的“小删除”,所以没有使用编号的寄存器;当你做更大的操作时,Vim 也使用寄存器,1-9但它不会改变寄存器的行为,0总是保持最新的显式 yank。

:h registers 是一本很好且易于理解的读物:Vim 有很多功能,插件并不能解决所有问题。

另外,请参阅我的建议黑洞寄存器的答案