vim:如何将光标下的字符替换为以前被删除的文本(不止一次)?

时间:2012-05-24 08:59:22

标签: vim replace

假设我使用视觉选择+猛拉将3个字符“foo”拉入我的剪贴板,即:'vllly'

然后我将光标移动到第5行的另一个角色(让我们称之为这个角色x),我想用之前的东西替换,即foo。

我可以使用'p'在x之后粘贴foo,或者'P'在x之前粘贴foo,但我想用foo替换 x。

我可以使用'vp'用foo替换x,但这只能工作一次,因为它在我的剪贴板中留下了x。换句话说,如果我移动到下一次出现的x并再次点击vp,它就不会用foo替换它。

当然,我可以使用:s / x / foo / gc进行搜索/替换,然后忽略我不想替换的所有x的出现,但输入有点单调乏味,特别是当所有我需要做的是替换2或3次出现的x非常接近我的光标但不在同一行(即:第2,3和7行)。

所以目前我正在使用:2,7s / x / foo / gc但是我想知道是否有办法将光标移动到x并点击[在这里插入魔术按钮]以用foo替换它。然后我可以移动到下一次出现的x并再次点击[magic button]并且繁荣,它再次用foo替换x。

尽管使用这个类比很难,但想象一下你输入了记事本,然后你选择了3个字符,点击Ctrl + c将它们复制到剪贴板中,然后高亮显示x,然后点击Ctrl + v用foo替换它。然后突出显示另一个x,然后再次按Ctrl + v,依此类推。

我如何在vim中执行此操作?

5 个答案:

答案 0 :(得分:41)

s<C-r>0如何,可以使用.

重复此操作
  • s删除光标下的字符,并进入插入模式。
  • <C-r>0插入寄存器0,其中包含被拉动的文本。

您也可以使用s并手动输入foo,这也可以.重复使用

答案 1 :(得分:5)

使用v"0p从0寄存器粘贴。

答案 2 :(得分:1)

将您的“foo”复制到另一个寄存器中,例如注册一个:

  

“AY

然后用“foo”直观地选择要替换的角色,然后按

  

“AP

答案 3 :(得分:0)

这不太理想,但是如果你猛冲到命名缓冲区a(例如用"ay猛拉),你可以使用x"aP。使用您喜欢的地图使其成为一次击键。

答案 4 :(得分:0)

我经常需要这个,我为此写了一个插件:ReplaceWithRegister

此插件提供了一个二合一gr命令,可将{motion},整行或当前选择所覆盖的文本替换为寄存器的内容;将旧文本删除到黑洞寄存器中,即它已经消失。