【问题标题】:Vim: Replace selection with default buffer without overwriting the bufferVim:用默认缓冲区替换选择而不覆盖缓冲区
【发布时间】:2011-04-19 18:17:25
【问题描述】:

这是我的问题:

我处于可视模式。

我选择文本并将其复制到缓冲区。 ((y)ank)

我选择另一个要替换的文本并粘贴缓冲区。 ((p)ast)

现在缓冲区中的第二个选项已被替换,但我希望第一个选项仍保留在那里。

有什么想法吗?

【问题讨论】:

标签: vim replace buffer yank


【解决方案1】:

虽然这在技术上不能回答问题(不使用默认缓冲区),但它确实解决了问题的症状,所以我想我仍然会分享。我解决了这个问题,解决了一个不同的问题。

我已将系统剪贴板中的“复制、粘贴”(拉动、放置)映射到“Ctrl-Shift-C、Ctrl-Shift-V”(如果大写锁定打开,则为 Ctrl-C、Ctrl-V)。这可以用来代替y,效果相同。

如果我使用系统缓冲区进行复制,粘贴时它不会被覆盖。

我将此添加到我的 .vimrc 中

vnoremap <C-V> "*p 
vnoremap <C-C> "*y

作为奖励,它可以让您轻松访问系统剪贴板。

【讨论】:

    【解决方案2】:

    通常,这种行为很有用。当你不想要它时,你可以做通常的 yank,然后用 "0p 粘贴(正式地,'put') . 你可以随意多次这样做。

    请参阅:help v_p 了解更多信息。

    如果你想避免覆盖,你需要先删除。可以使用"_选择黑洞缓冲区,然后删除d,然后粘贴到P之前,就可以避免设置缓冲区了。

    【讨论】:

    • 谢谢彼得,我明白了,您使用显式缓冲区来解决问题。有没有一种方法/设置可以避免通过首先选择来自动填充缓冲区?
    • 您可以通过在可视模式下重新映射“p”命令将这两个设置为默认值。第一个选项是:vnoremap p "0p。这在进入可视模式时使用“0”寄存器(最近的 yank)。 unname 寄存器仍然被覆盖,但随后的 puts(在可视模式下)不使用它。这确实意味着您必须先拉动,然后删除然后放置(在可视模式下)不再起作用。第二个选项(恕我直言)更好:vnoremap p "_dP 并重新映射 p 以首先删除到黑洞寄存器,然后在之前执行正常放置。这应该正是您所要求的。
    • 我从来没有发现 vim 的默认行为有用。 “put”不应该是“copy and put”。
    • @preferred_anon 不,当您复制某些内容(或“拉动”它)然后选择其他内容并将其替换为 p(通过粘贴您复制的内容)时,p 也将替换您之前复制的内容你要换什么。所以要用相同的东西替换多个地方,你必须用“_d”将每个地方删除到void寄存器中,然后你可以用p粘贴。但是p应该只是粘贴imho,如果你想在之前复制,你应该在之前复制。如果我要更换它,这条线不应该去任何地方。
    • @stimulate 我对此深表同情。 c 可能对您有帮助的一件事:它应该代表 change,这就是为什么它会在之后将您置于插入模式。
    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多