vim:我如何用先前拖动的文本(不止一次)替换光标下的字符?

vim:我如何用先前拖动的文本(不止一次)替换光标下的字符?,vim,replace,Vim,Replace,比方说,我已经使用视觉选择+猛拉将3个字符“foo”猛拉到我的剪贴板中,即:“vlly” 然后我将光标移动到第5行的另一个字符(我们称这个字符为x),我想用我之前拉过的字符替换它,即foo 我可以使用“p”将foo粘贴到x之后,或者使用“p”将foo粘贴到x之前,但是我想用foo替换x 我可以使用“vp”将x替换为foo,但这只起作用一次,因为它将x留在剪贴板中。换句话说,如果我移动到下一个出现的x并再次点击vp,它不会用foo替换它 当然,我可以使用:s/x/foo/gc进行搜索/替换,然后忽

比方说,我已经使用视觉选择+猛拉将3个字符“foo”猛拉到我的剪贴板中,即:“vlly”

然后我将光标移动到第5行的另一个字符(我们称这个字符为x),我想用我之前拉过的字符替换它,即foo

我可以使用“p”将foo粘贴到x之后,或者使用“p”将foo粘贴到x之前,但是我想用foo替换x

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

当然,我可以使用:s/x/foo/gc进行搜索/替换,然后忽略所有我不希望替换的x,但这有点繁琐,尤其是当我需要做的只是替换2或3个与光标非常接近但不在同一行的x(即:第2、3和7行)

因此,目前我使用的是:2,7s/x/foo/gc,但我想知道是否有办法将光标移动到x并点击[insert magic button here]将其替换为foo。然后我可以移动到下一个出现的x,再次点击[魔术按钮],然后砰的一声,它又用foo替换了x

使用这个类比让我非常痛苦,想象你在记事本中键入,然后选择3个字符,按Ctrl+c将它们复制到剪贴板中,然后高亮显示x,然后按Ctrl+v将其替换为foo。然后高亮显示另一个x,然后再次按Ctrl+v,依此类推

如何在vim中执行此操作?

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

“啊

然后目视选择要替换为“foo”的字符,然后按

“美联社


v“0p
从0寄存器粘贴这不太理想,但是如果你猛拉到命名缓冲区
a
(例如用
“ay
猛拉),你可以使用
x“aP
。使用你最喜欢的映射来使它成为一个按键。

那么
s0
呢,这可以用
重复

  • s
    删除光标下的字符并将您置于插入模式
  • 0
    插入寄存器0,该寄存器保存被拖动的文本

您还可以使用
s
并手动键入
foo
,这也可以通过

重复。我经常需要它,为此我编写了一个插件:


该插件提供了一个二合一的
gr
命令,该命令替换了{motion}整行覆盖的文本或者是当前选择的带有寄存器内容的文本;旧文本被删除到黑洞寄存器中,即它消失了。

我想你会在这里找到最好的选择:你是说
lll
还是
hhh
而不是
kkk
k
是的,我是说lll我不好,谢谢@chrismorgan谢谢,它工作得很好t、 然而,我选择了上面Stefan的答案,因为我发现它更容易打字。这很好。1.我总是使用
cl
(没有意识到
s
会这样做),2.我习惯性地使用
“0
,我从来没有想过我可以推迟到插入模式。我已经每天使用I_CTRL-R了