抱歉,如果这已经发布,因为我找不到答案,即使在 vim wiki 上也是如此。
有没有一种方法可以在 vim 命令行模式下通过一次:g
搜索运行多个命令?
例如,
:%g/foo/ s/bar/\=@a/g | exe "norm /cat\<enter>\"ayiw"
哪个(对于我打算做的事情)应该在每一行 matchfoo
上替换bar
为 register 的内容a
,然后找到下一次迭代cat
(即使它前面有很多行),并将周围的单词放入 register a
。
相反,此特定语法使用初始寄存器的当前内容a
完成替换命令,然后在单行上执行正常模式命令(在完成替换之后)。
此示例不是我的特定用例,但显示了此功能有用的一个实例。我意识到我可以把它全部放在一个单一exe
的 ie, 中%g/foo/exe "norm :s/bar/\\=@a/g\<enter>/cat\<enter>\"ayiw"
,但我想用第一种方式来做,因为我觉得它更灵活。
我更喜欢使用 vanilla vim 来执行此操作,但如果存在为此的插件,那是一个不错的选择。有谁知道是否有语法来做这样的事情?