我有一行文本,我已经使用yy
命令复制了它。现在我想用这个文本替换其他几个位置的文本。问题是,当我选择要替换的V
行并粘贴p
时,之前选定的文本会被自动复制!这正是我不想要的。
更改寄存器无效,因为复制和粘贴都是使用新选择的寄存器进行的。
如何在覆盖选定文本时保留寄存器内容的命令?
我有一行文本,我已经使用yy
命令复制了它。现在我想用这个文本替换其他几个位置的文本。问题是,当我选择要替换的V
行并粘贴p
时,之前选定的文本会被自动复制!这正是我不想要的。
更改寄存器无效,因为复制和粘贴都是使用新选择的寄存器进行的。
如何在覆盖选定文本时保留寄存器内容的命令?
你原始选择应该保留在寄存器0
中。这样,你就可以遍历文件,并使用以下命令将已复制的行粘贴到其他行上:V"0p
:reg
命令查看当前寄存器的内容。这篇文章很好地解释了 Vim 中的寄存器,包括黑洞寄存器和“删除缓冲区”寄存器 0-9。最后提醒一下:使用 :help register
命令获取更多信息。 - pb2qp
命令粘贴内容时,它都会被放入默认寄存器中。p
命令之前使用"_
,即“黑洞寄存器”。下面是我在~/.vimrc
中使用的自定义映射:vnoremap <leader>p "_dP
它删除所选内容并将其丢弃到黑洞寄存器中(这意味着所选文本永远消失),同时将默认寄存器的内容放置在先前选择的文本位置,同时保持默认寄存器不变。
当我需要在几个地方用另一个很长的url替换一个很长的url时,它是我经常使用的工具,手动编写//太繁琐了。
vnoremap p "_dP
- bora89
pdd
来解决问题。 - a3nmpyy
,这会再次复制当前行? - Didier Trossetpjdd
。话虽如此,我不明白你的建议。 - a3nmpyy
,你首先粘贴寄存器的内容,然后将刚刚粘贴的行复制到寄存器中,以覆盖粘贴时设置的内容。pdd
的问题在于它会删除我刚刚粘贴的内容。 - Didier Trosset