假设我使用视觉选择+猛拉将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中执行此操作?
答案 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},整行或当前选择所覆盖的文本替换为寄存器的内容;将旧文本删除到黑洞寄存器中,即它已经消失。