Vim - 在可视模式下复制/粘贴时保留上次复制的文本

时间:2013-09-10 22:47:25

标签: vim

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

  1. 复制任意文本(让我们称之为“文字A”)
  2. 以可视模式选择任何其他文字(我们称之为“文字B”)
  3. 选择后,按“p”将“文字B”替换为“文字A”
  4. 在其他地方再次按“p”。结果是“文本B”被粘贴。
  5. 我希望第4步产生“文字A”。

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

2 个答案:

答案 0 :(得分:6)

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

(不是我的代码,之前在某处发现过。)

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

编辑:如果你将一个明智的选择粘贴到一个字符选择中,它就不能很好地工作了。不要打扰我太多,因为这不是一个非常常见的情况,但仍然是一个警告,以防万一。

答案 1 :(得分:0)

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

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