Vim:用默认缓冲区替换选择,而不覆盖缓冲区

Vim:用默认缓冲区替换选择,而不覆盖缓冲区,vim,replace,buffer,yank,Vim,Replace,Buffer,Yank,我的问题是: 我处于视觉模式 我选择文本并将其复制到缓冲区。((y)ank) 我选择另一个要替换的文本并粘贴缓冲区。((p)aste) 现在第二个选项已经被替换在缓冲区中,但是我希望第一个选项仍然位于缓冲区中 有什么想法吗?通常,这种行为很有用。当你不想要它时,你可以改为做通常的猛拉,然后用“0p”粘贴(正式的“put”)。你可以做很多次 有关更多信息,请参见:帮助v_p 如果要避免覆盖,您需要先删除。您可以使用“\u选择黑洞缓冲区,然后删除d,然后在p之前粘贴,这样您就可以避免设置缓冲区。,但

我的问题是:

我处于视觉模式

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

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

现在第二个选项已经被替换在缓冲区中,但是我希望第一个选项仍然位于缓冲区中


有什么想法吗?

通常,这种行为很有用。当你不想要它时,你可以改为做通常的猛拉,然后用“0p”粘贴(正式的“put”)。你可以做很多次

有关更多信息,请参见
:帮助v_p


如果要避免覆盖,您需要先删除。您可以使用
“\u
选择黑洞缓冲区,然后删除
d
,然后在
p
之前粘贴,这样您就可以避免设置缓冲区。

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

我已将“复制,粘贴”(yank,put)从系统剪贴板映射到“Ctrl-Shift-C,Ctrl-Shift-V”(如果caps lock处于启用状态,则为Ctrl-C,Ctrl-V)。这可以用来代替
y
,效果相同

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

我将此添加到我的.vimrc中

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

作为奖励,它将使您能够轻松访问系统剪贴板。

谢谢Peter,我明白了,您使用了显式缓冲区来完成这项任务。是否有一种方法/设置可以避免在第一时间仅仅通过选择自动填充缓冲区?不幸的是,没有(请参阅所提到的帮助)。此外,设置的不是选择,而是在选择上粘贴。不过,我在回答中添加了另一种方法。您可以通过在视觉模式下重新映射“p”命令,将这两种方法都设置为默认方法。第一个选项是:
vnoremap p“0p
。在视觉模式下放置时,这将使用“0”寄存器(最近的yank)。未命名寄存器仍被覆盖,但后续放置(在视觉模式下)不使用它。这意味着您必须先拖动、删除,然后再放置(在视觉模式下)不再有效。第二个选项(IMHO)更好:
vnoremap p“\u dP
并重新映射到黑洞寄存器中,首先删除,然后在之前执行正常的put。这应该正是您想要的。我从未发现vim的默认行为有用。“放置”不应该是“复制并放置”。@我绝对赞同这一点。有一件事可以帮助您使用
c
:它应该代表
change
,这就是为什么它会在以后将您置于插入模式。可能重复