VIM查找所有匹配项并替换为输入

7

是否可以搜索文件中特定单词的出现次数,并询问用户输入以将该单词替换为其他内容。重复相同的步骤,无论是键入新的替换还是使用历史记录中的某个内容,直到所有单词都被替换或用户退出。请记住,我希望有选择地跳过我不想替换的单词。

只使用

:%s/value_one/value_two/gc

这意味着我需要为每个想要替换的不同变量执行该命令。这种工作流是否可行?在粘贴只需要更改一个变量的样板代码时,我会使用它。
2个回答

15

你正在寻找:

%s/value_one/\=input('replace <'.submatch(0).'> with: ')/gc

:h :s\=:h input()。如果需要,您应该能够为input提供一个默认值。


运行得非常好。正是我所寻找的! - ExcellentAverage
我可能错了,但不应该是: %s/value_one/=input('用<'.submatch(0).'>替换为:')/gc。在value_one后面加上双斜杠会出现“E488:尾随字符”的错误提示。 - ExcellentAverage

3

这可能不是最完美的方法,只是分享我所使用的方法。

假设已经设置了:set hl。按下*将搜索光标下的单词。把光标移到你要修改的单词上。但我通常使用gd而不是*

然后,使用ciw更改为替换词。然后按Esc。我们现在可以通过n查找下一个出现的单词。

如果需要将其更改为相同的单词,则按下.即可实现。 否则,您可以再次使用ciw更改为新值。

如果您不打算更改下一个出现的单词,只需按n跳过它,即可到达下一个出现的单词。

这看起来有点繁琐,但这可以对我的编辑进行保守控制。


感谢您的回复。我更喜欢Luc Hermitte的答案,因为在我看来它更加优雅。不过还是非常感谢您的努力。 - ExcellentAverage
当然,没问题。我也是。 - dlmeetei
1
你也可以使用 gn 动作。例如,使用 cgn 然后 . 来重复(不要使用 n!)。更多帮助请参见 :h gn 和这个 Vimcasts 节目:使用 gn 操作搜索匹配项 - Peter Rincker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接