在使用Vim时,我经常想用我刚拉出的代码块替换代码块。

但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。

那么,在Vim中替换文本的最灵活、最快的方法是什么呢?

是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?


当前回答

为了强调EBGreen所说的:

如果在选择文本时进行粘贴,则所选文本将替换为粘贴的文本。

如果您想复制一些文本,然后将其粘贴到多个位置,请使用“0p”进行粘贴。编号为0的寄存器包含来自最近yank命令的文本。


此外,你可以列出所有寄存器的内容:

:registers

该命令使得在执行dbr应答之类的操作时更容易找出需要的寄存器。您还将看到/,%,#寄存器。(请参见:帮助寄存器)


最后,检查cW和cW来改变一个单词,包括和不包括尾随空格。(大写W包含标点符号。)

其他回答

是的。这比先删除“旧”文本稍微复杂一些,但是:

我从。开始。

line1
line2
line3
line4

old1
old2
old3
old4

shift+v选择line1, line2, line3和line4,然后用d命令删除它们

然后用同样的方法删除原来的1-4行。

然后,做

"2p

这将粘贴倒数第二行(第1-4行)。“3p会做倒数第三,以此类推。

最后得到

line1
line2
line3
line4

参考: 编号寄存器上的Vim文档

我找到了一个非常有用的映射:

xnoremap p "_dP

删除的文本被放入“黑洞寄存器”,而被拉拽的文本仍然存在。

来源:http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text

VIM文档:编号为0的寄存器包含来自最近yank命令的文本, 除非该命令指定了另一个["x]寄存器。

例如,我们删除“foo”和“bar”-注册表0仍然包含“foo”!因此“foo”可以使用“0p”来粘贴

我发现从一开始就更容易插入'p'缓冲区。

复制(又名:yank)

# highlight text you want to copy, then:
"py

粘贴

# delete or highlight the text you want to replace, then:
"pp

优点(相对于删除到特定寄存器):

“pp很容易上手 不会在删除时意外覆盖粘贴缓冲区。

好吧,首先执行以下命令:

:h d

然后你会发现你可以删除到一个特定的寄存器。这样就不会改变默认寄存器中的内容。