【问题标题】:Vim pasting -- scroll through previously yanked textVim 粘贴 -- 滚动浏览先前拉出的文本
【发布时间】:2013-06-05 12:15:33
【问题描述】:

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

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

在返回进行清理之前,我基本上必须“原子地”完成移动,否则我会得到令人沮丧的逗号、括号或空格粘贴。哦,我知道我为什么按另一个顺序做。它只是更有效。我不必搬到目的地,然后返回清理,然后再次返回

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

这样我可以删除所有我想要的东西,而且我实际上可以快速提取任何最近删除的项目,只要它是一个连续的片段。这当然很容易通过视觉选择然后删除来设置。这以易用性为代价换取了特殊性,因为我不再需要记住指定一些特定的命名寄存器以用于特定的粘贴。

特别是,应该有一个堆栈,拉取和删除都累积到其中,稍后在粘贴过程中使用单个绑定快速遍历。

是否有一个插件已经可以做到这一点?

【问题讨论】:

  • 我现在读了 3 遍,但我没有得到这个问题。您是否正在寻找如何使用寄存器来存储要粘贴的不同文本?
  • 你用过YouCompleteMe这样的插件吗?我说的是一个插件,用于将“错误的粘贴”追溯更新到 yank 缓冲区就地中的较早粘贴。 IE。我打了p,插入了"0。我想点击plugin key 将刚刚粘贴的"0 替换为"1 等。
  • 不,那个对我来说是新的。尽量保持我的 vim 干净......
  • 当然。 YCM 绝对是最难上手的插件之一,因为它有一个本地编译的组件并且需要 python……但这对我来说都是值得的

标签: vim


【解决方案1】:

为什么不使用命名寄存器?例如,使用"ay yank 注册a,然后"ap 稍后再次粘贴,同时不会被正常删除等破坏。

【讨论】:

  • 对。 我在问题中解决了这个问题。 考虑到这至少是六个额外的击键,shift+'+a 两次。所有不同的键。按特定顺序。这永远不会很快。 yanks 已经输入到数字命名的寄存器中。只需要一种方法来循环它们。
【解决方案2】:

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

只有一个yank register,那就是"0

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

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

滚动浏览以前被拉出的文本通常是通过插件完成的,我所知道的最流行的插件

  • YankRing.vim,“保留以前的 yanks、更改和删除的历史记录”,以及
  • yankstack,“为 vim 实现 emacs 的 kill ring 的轻量级实现”。

【讨论】:

  • 您好,感谢您澄清此行为。如果没有人像这样解释它,很难做到正确(即使我花了 几次尝试)。看起来它需要您指定"1p,然后点才能通过继续寄存器来起作用,并且就像您提到的那样,必须使用u。不过,作为默认功能,这并不算太糟糕,尽管它对我来说并不实用,因为在 p 失败后必须输入 "1p(这意味着我也必须点击 u)感觉太麻烦了,如果功能强大的话. yankstack 插件正是医生订购的。谢谢!
【解决方案3】:
[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 的行为,它总是保持最新的显式 yank。

:h registers 是一个很好且易于理解的读物:Vim 有很多功能,插件并不是万能的。

另外,请参阅this answer of mine 建议黑洞寄存器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2014-11-30
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多