我经常发现自己使用类似的东西:
sed -ri 's/<\/(abc|def ghi|j klm)>//g' someFile.html
要对多种可能的模式执行替换,在本例中,要删除一个结束 html 标签,这样我就可以节省时间和精力,为我想要删除的三个结束标签分别执行三次此操作。
有没有办法在 vim 的 cli 上使用替代品来做到这一点?我还没有找到一种方法来做到这一点,但如果可以本地完成的话,它会比进入终端 cli 或从 vim 中运行 sed 更有效。
是的,您根本不需要使用外部程序:
:%s/<\/\(foo\|bar\|baz\)>//g
参见
:help :s
、:help :range
,以及更一般的 :help pattern
。
您可以使用
silent !
命令从 vim 内部静默执行 shell 命令:
:silent !sed -ri 's/<\/(abc|def ghi|j klm)>//g' %
这将在 shell 中静默执行命令(它不会让您离开 vim 查看任何 shell 输出)。
%
表示当前缓冲区名称。然后,Vim 会通知您正在编辑的文件已更改,并询问您是否要加载更改,按 l 进行加载,然后会出现来自 sed
shell 命令的新更改。