4

我想更改在可视模式下粘贴文本的默认(和愚蠢)行为。这是当前的步骤和行为:

  1. 复制任意文本(我们称之为“文本 A”)
  2. 在可视模式下选择任何其他文本(我们称之为“文本 B”)
  3. 选中后,按“p”将“text B”替换为“text A”
  4. 在其他地方再次按“p”。结果是“文本 B”被粘贴。

我希望第 4 步产生“文本 A”。

换句话说,我想在可视模式下粘贴以保留我复制的文本,以便我可以继续粘贴它,而不是用任何被替换的内容覆盖它。

4

2 回答 2

6
xnoremap <expr> P '"_d"'.v:register.'P'

(不是我的代码,之前在某个地方找到过)。

我不会说默认是愚蠢的,我以前用过它效果很好。在这里使用效果很好,因为在视觉上和视觉P上没有区别,所以最好让其中一个做非默认的事情,同时仍然允许默认。pP

编辑:如果您将逐行拉动粘贴到逐字符选择中,则效果不佳。不会打扰我太多,因为这不是一个真正常见的情况,但仍然是一个警告,以防万一。

于 2013-09-10T22:56:37.863 回答
0

我经常需要这个,我写了一个插件来简化并允许最大速度:ReplaceWithRegister

这个插件提供了一个二合一的gr命令,用寄存器的内容替换被 {motion} / 文本对象、整行或当前选择覆盖的文本;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准.命令快速重复。如果您不喜欢它,它的页面有指向替代品的链接。

于 2013-09-11T07:58:38.567 回答