【发布时间】:2011-04-19 18:17:25
【问题描述】:
这是我的问题:
我处于可视模式。
我选择文本并将其复制到缓冲区。 ((y)ank)
我选择另一个要替换的文本并粘贴缓冲区。 ((p)ast)
现在缓冲区中的第二个选项已被替换,但我希望第一个选项仍保留在那里。
有什么想法吗?
【问题讨论】:
这是我的问题:
我处于可视模式。
我选择文本并将其复制到缓冲区。 ((y)ank)
我选择另一个要替换的文本并粘贴缓冲区。 ((p)ast)
现在缓冲区中的第二个选项已被替换,但我希望第一个选项仍保留在那里。
有什么想法吗?
【问题讨论】:
虽然这在技术上不能回答问题(不使用默认缓冲区),但它确实解决了问题的症状,所以我想我仍然会分享。我解决了这个问题,解决了一个不同的问题。
我已将系统剪贴板中的“复制、粘贴”(拉动、放置)映射到“Ctrl-Shift-C、Ctrl-Shift-V”(如果大写锁定打开,则为 Ctrl-C、Ctrl-V)。这可以用来代替y,效果相同。
如果我使用系统缓冲区进行复制,粘贴时它不会被覆盖。
我将此添加到我的 .vimrc 中
vnoremap <C-V> "*p
vnoremap <C-C> "*y
作为奖励,它可以让您轻松访问系统剪贴板。
【讨论】:
通常,这种行为很有用。当你不想要它时,你可以做通常的 yank,然后用 "0p 粘贴(正式地,'put') . 你可以随意多次这样做。
请参阅:help v_p 了解更多信息。
如果你想避免覆盖,你需要先删除。可以使用"_选择黑洞缓冲区,然后删除d,然后粘贴到P之前,就可以避免设置缓冲区了。
【讨论】:
vnoremap p "0p。这在进入可视模式时使用“0”寄存器(最近的 yank)。 unname 寄存器仍然被覆盖,但随后的 puts(在可视模式下)不使用它。这确实意味着您必须先拉动,然后删除然后放置(在可视模式下)不再起作用。第二个选项(恕我直言)更好:vnoremap p "_dP 并重新映射 p 以首先删除到黑洞寄存器,然后在之前执行正常放置。这应该正是您所要求的。
c 可能对您有帮助的一件事:它应该代表 change,这就是为什么它会在之后将您置于插入模式。