在使用Vim时,我经常想用我刚拉出的代码块替换代码块。
但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。
那么,在Vim中替换文本的最灵活、最快的方法是什么呢?
是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?
在使用Vim时,我经常想用我刚拉出的代码块替换代码块。
但是当我删除要替换的代码块时,该代码块本身就会进入寄存器,它会擦除我刚刚删除的代码块。所以我已经养成了拉拽,然后插入,然后删除我不想要的东西的习惯,但对于大块的代码,这变得很混乱,试图保持插入的块和要删除的块分开。
那么,在Vim中替换文本的最灵活、最快的方法是什么呢?
是否有一种方法可以删除文本而不将其放入寄存器? 有一种说法吗?“替换下一个单词”或“替换到下一段” 还是使用多寄存器特性的最佳方式?
当前回答
是的。这比先删除“旧”文本稍微复杂一些,但是:
我从。开始。
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文档
其他回答
我在适当的情况下使用的两种解决方案是;
用Vims VISUAL模式突出显示你想要替换的内容,然后粘贴寄存器。
我使用这个主要是出于习惯,因为我只是在很久以后才发现第二个解决方案,例如
yiw " yank the whole word
viwp " replace any word with the default register
YankRing。有了这个插件,你可以使用键绑定<ctrl>+<p>来替换之前的编号寄存器与你刚刚粘贴的。
基本上你去粘贴,因为你会,但当你意识到你已经覆盖了默认寄存器,从而失去了什么你实际上想要粘贴你可以<C-P>找到和替换从YankRing历史!
其中一个肯定有插件…
下面的vscode设置应该允许dd和dw变成“_dd和”_dw,现在我们的remapper可以正常工作。
{
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["d"],
"after": [ "\"", "_", "d" ]
}
]
}
对于那些使用JetBrans IDE (PhpStorm, WebStorm, IntelliJ IDEA)与IdeaVim。你可能会遇到像nnoremap d "_d这样的重映射问题,并使用它来删除一行dd。可能的解决方案:nnoremap dd "_dd
youtrack上有一些问题,请为它们投票: https://youtrack.jetbrains.com/issue/VIM-1189 https://youtrack.jetbrains.com/issue/VIM-1363
Noremap mm m
and
Noremap mx "_x
是我的处理方式。
在windows版本中(可能也在Linux中),你可以使用“*y”(即在你的yank命令前加双引号和星号)插入系统的复制/粘贴缓冲区。
然后,您可以正常删除可替换的行,并使用“*p”粘贴复制的文本。