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

时间:2013-06-09 20:14:52

标签: vim

我正在尝试提高Vim中粘贴功能的可用性,因为太多不同的删除操作(事实上我确实认为它们全部都是这样)也会进入粘贴缓冲区。

这意味着我不再能够删除某些文本,我想要粘贴到某处,清理一些内容,然后执行我的粘贴。我不知道为什么这是我喜欢做的顺序,但我不打算改变它。

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

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

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

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

那里有插件吗?

3 个答案:

答案 0 :(得分:23)

您对编号的寄存器(:h quote_number)感到有点困惑。

只有一个抽签 "0

除此之外,还有九个编号删除寄存器"1"9 。它们作为队列填充,最新删除位于顶部。

对于删除寄存器"1"9,Vim具有您要求内置的功能:您可以粘贴"1p,如果它不是您要找的内容您可以重复u. u. u.来切换注册"2"3"4等,直到您找到正确对象,真爱。此行为记录在:h redo-register

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

  • YankRing.vim,“维护之前的抽奖,更改和删除的历史”,以及
  • yankstack,“轻量级实施emacs'为vim杀死戒指”。

答案 1 :(得分:5)

为什么不使用命名寄存器?例如,使用"ay来注册a,然后"ap稍后再粘贴它,并且在此期间它不会被正常删除等破坏。

答案 2 :(得分:4)

[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"

因为注册0仍然包含您抽出的内容(lorem),即使在大量cds之后,"0p总是粘贴lorem,直到你明确地抽出别的东西为止。

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

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

另外,请参阅this answer of mine建议黑洞注册。