当在选定的文本上粘贴时,vim如何保留寄存器的内容?

47

我有一行文本,我已经使用yy命令复制了它。现在我想用这个文本替换其他几个位置的文本。问题是,当我选择要替换的V行并粘贴p时,之前选定的文本会被自动复制!这正是我不想要的。

更改寄存器无效,因为复制和粘贴都是使用新选择的寄存器进行的。

如何在覆盖选定文本时保留寄存器内容的命令?


你可能已经意识到了,但我认为你总是可以通过 pdd 来解决问题。 - a3nm
@a3nm 你是不是想说 pyy,这会再次复制当前行? - Didier Trosset
抱歉,我是指 pjdd。话虽如此,我不明白你的建议。 - a3nm
@a3nm 好的,使用 pyy,你首先粘贴寄存器的内容,然后将刚刚粘贴的行复制到寄存器中,以覆盖粘贴时设置的内容。pdd 的问题在于它会删除我刚刚粘贴的内容。 - Didier Trosset
可能是如何在不覆盖寄存器的情况下进行粘贴的重复问题。 - Kevin Ji
2个回答

43

你原始选择应该保留在寄存器0中。这样,你就可以遍历文件,并使用以下命令将已复制的行粘贴到其他行上:V"0p


6
另外,使用 :reg 命令查看当前寄存器的内容。这篇文章很好地解释了 Vim 中的寄存器,包括黑洞寄存器和“删除缓冲区”寄存器 0-9。最后提醒一下:使用 :help register 命令获取更多信息。 - pb2q
3
这是更好的答案。当已经有一个专门用于保存剪贴文本的注册表时,就没有必要将删除的内容发送到黑洞注册表中。 - rviertel
@rviertel 这样做有什么好处呢?是不是更好地敲击键盘来得到你想要的东西?最后,问问自己有多少次你需要替换内容?对我来说,答案是零,从来没有一次我需要替换内容。 - bora89
@rviertel 这样做有什么好处呢?是不是更好地打出许多键盘按键才能得到你想要的东西?最后,问问自己你需要多少次替换内容?对我来说,答案是零,从未需要替换过内容。 - bora89

41
每次你用 p 命令粘贴内容时,它都会被放入默认寄存器中。
为了避免这个特性,你需要在使用p命令之前使用"_,即“黑洞寄存器”。下面是我在~/.vimrc中使用的自定义映射:
vnoremap <leader>p "_dP

它删除所选内容并将其丢弃到黑洞寄存器中(这意味着所选文本永远消失),同时将默认寄存器的内容放置在先前选择的文本位置,同时保持默认寄存器不变。

当我需要在几个地方用另一个很长的url替换一个很长的url时,它是我经常使用的工具,手动编写//太繁琐了。


我变得更加极端了:vnoremap p "_dP - bora89
你是个疯子! - romainl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接