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
效果很好,因为p
和P
在视觉上没有区别,所以最好让其中一个做非默认的事情,同时仍然允许默认。
编辑:如果您将逐行拉动粘贴到逐字符选择中,则效果不佳。不会太打扰我,因为这不是很常见的情况,但仍然是一个警告,以防万一。
【讨论】:
【参考方案2】:我经常需要这个,我写了一个插件来简化并允许最大速度:ReplaceWithRegister。
这个插件提供了一个二合一的gr
命令,可以用寄存器的内容替换被motion/文本对象覆盖的文本、整行或当前选择;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准.
命令快速重复。如果您不喜欢它,它的页面会提供替代链接。
【讨论】:
以上是关于Vim - 在可视模式下复制/粘贴时保留上次复制的文本的主要内容,如果未能解决你的问题,请参考以下文章