在使用Vim时,我经常想用我刚拉出的代码块替换代码块。
但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。
那么,在Vim中替换文本的最灵活、最快的方法是什么呢?
是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?
在使用Vim时,我经常想用我刚拉出的代码块替换代码块。
但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。
那么,在Vim中替换文本的最灵活、最快的方法是什么呢?
是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?
当前回答
在插入模式下删除的文本不会进入默认寄存器。
其他回答
有一个简单的映射是很方便的,它可以让你用缓冲区替换当前选择。
例如,当你把这个放在你的。vimrc
" it's a capital 'p' at the end
vmap r "_dP
然后,在复制一些东西到寄存器(即用“y”)后,你可以选择你想要替换的文本,并简单地敲击键盘上的“r”。所选内容将被当前寄存器替换。
解释:
vmap - mapping for visual mode
"_d - delete current selection into "black hole register"
P - paste
对于'replace word',请在正常模式下尝试cw。
对于“替换段落”,尝试在正常模式下使用cap。
我找到了一个非常有用的映射:
xnoremap p "_dP
删除的文本被放入“黑洞寄存器”,而被拉拽的文本仍然存在。
来源:http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text
我在适当的情况下使用的两种解决方案是;
用Vims VISUAL模式突出显示你想要替换的内容,然后粘贴寄存器。
我使用这个主要是出于习惯,因为我只是在很久以后才发现第二个解决方案,例如
yiw " yank the whole word
viwp " replace any word with the default register
YankRing。有了这个插件,你可以使用键绑定<ctrl>+<p>来替换之前的编号寄存器与你刚刚粘贴的。
基本上你去粘贴,因为你会,但当你意识到你已经覆盖了默认寄存器,从而失去了什么你实际上想要粘贴你可以<C-P>找到和替换从YankRing历史!
其中一个肯定有插件…
我发现从一开始就更容易插入'p'缓冲区。
复制(又名:yank)
# highlight text you want to copy, then:
"py
粘贴
# delete or highlight the text you want to replace, then:
"pp
优点(相对于删除到特定寄存器):
“pp很容易上手 不会在删除时意外覆盖粘贴缓冲区。