匹配行上的 shell 命令(在 vim 中:将全局 `:g` 或 `:v` 命令与 shell 命令结合起来)

匹配行上的 shell 命令(在 vim 中:将全局 `:g` 或 `:v` 命令与 shell 命令结合起来)

我想使用 shell 命令(fmt在本例中)对文件中正则表达式的每一行(不)匹配进行操作。我更喜欢在 内进行操作vim!不过,我也愿意接受纯 shell/bash/zsh 解决方案,因为 vim:!也提供。

是否可以合并

:g/pattern/[cmd]

使用在匹配行上执行的 shell 命令?类似

:g/pattern/!fmt -w 72

不管用。

答案1

我找到了答案!你可以使用

:g!/^ /.!fmt -w 40

在找到的行上使用该 shell 命令。但是,这仅适用于单行,因此它不会删除换行符,只会添加新的换行符。如果有人可以改进这一点,请随时发布如何改进 :)

相关内容