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

Posted

技术标签:

【中文标题】Vim - 在可视模式下复制/粘贴时保留上次复制的文本【英文标题】:Vim - Preserve last copied text when copy/pasting in visual mode 【发布时间】:2013-09-14 19:34:25 【问题描述】:

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

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

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

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

【问题讨论】:

尝试使用black hole register... 或者将您提取的文本放入一个命名寄存器中。 有趣的事实:最后一个 yank 总是在 "0 寄存器中找到! 【参考方案1】:
xnoremap <expr> P '"_d"'.v:register.'P'

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Vim - 在可视模式下复制/粘贴时保留上次复制的文本的主要内容,如果未能解决你的问题,请参考以下文章

vim copy / yank而不离开可视模式

转vim复制与粘贴

Vim复制剪切粘贴设置行号等技巧

Vim复制剪切粘贴设置行号等技巧

VIM

VIM快速复制多行