在使用Vim时,我经常想用我刚拉出的代码块替换代码块。
但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。
那么,在Vim中替换文本的最灵活、最快的方法是什么呢?
是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?
在使用Vim时,我经常想用我刚拉出的代码块替换代码块。
但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。
那么,在Vim中替换文本的最灵活、最快的方法是什么呢?
是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?
当前回答
默认情况下,所有的yank和delete操作都写入未命名寄存器。然而,最近的yank和最近的delete总是存储在有编号的寄存器中(分开)。寄存器0保存最近的yank。寄存器1-9保存了最近的9个删除(其中1是最近的)。
换句话说,delete覆盖了未命名寄存器中最近的yank,但它仍然存在于0寄存器中。在其他答案中提到的黑洞寄存器技巧(“_dd)之所以有效,是因为它可以防止覆盖未命名的寄存器,但这不是必要的。
你可以使用双引号引用一个寄存器,所以可以像这样粘贴最近拉出的文本:
"0p
这是一个很好的参考:
http://blog.sanctum.geek.nz/advanced-vim-registers/
其他回答
我发现从一开始就更容易插入'p'缓冲区。
复制(又名:yank)
# highlight text you want to copy, then:
"py
粘贴
# delete or highlight the text you want to replace, then:
"pp
优点(相对于删除到特定寄存器):
“pp很容易上手 不会在删除时意外覆盖粘贴缓冲区。
对于'replace word',请在正常模式下尝试cw。
对于“替换段落”,尝试在正常模式下使用cap。
在插入模式下删除的文本不会进入默认寄存器。
寄存器0到9是最新的东西你拉或削减等,不包括删除的东西等。所以如果你拉/切一些东西,它也在寄存器0中,即使你说在那之后删除了东西,寄存器0仍然是你拉/切的最后一个东西。
yiw#转到默认寄存器和寄存器0
它猛拉光标所在的单词
删除的东西等将去默认寄存器,但不是寄存器0
标准模式:
“0p#放入寄存器0的内容
插入模式:
Ctrl-r 0 #放入寄存器0的内容
我也有一个朋友,他总是猛拉/切来注册x,哈哈。
有一个简单的映射是很方便的,它可以让你用缓冲区替换当前选择。
例如,当你把这个放在你的。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