在 vim 搜索中使用 OR 替换多种可能的模式

问题描述 投票:0回答:2

我经常发现自己使用类似的东西:

sed -ri 's/<\/(abc|def ghi|j klm)>//g' someFile.html

要对多种可能的模式执行替换,在本例中,要删除一个结束 html 标签,这样我就可以节省时间和精力,为我想要删除的三个结束标签分别执行三次此操作。

有没有办法在 vim 的 cli 上使用替代品来做到这一点?我还没有找到一种方法来做到这一点,但如果可以本地完成的话,它会比进入终端 cli 或从 vim 中运行 sed 更有效。

vim
2个回答
5
投票

是的,您根本不需要使用外部程序:

:%s/<\/\(foo\|bar\|baz\)>//g

参见

:help :s
:help :range
,以及更一般的
:help pattern


3
投票

您可以使用

silent !
命令从 vim 内部静默执行 shell 命令:

:silent !sed -ri 's/<\/(abc|def ghi|j klm)>//g' %

这将在 shell 中静默执行命令(它不会让您离开 vim 查看任何 shell 输出)。

%
表示当前缓冲区名称。然后,Vim 会通知您正在编辑的文件已更改,并询问您是否要加载更改,按 l 进行加载,然后会出现来自
sed
shell 命令的新更改。

© www.soinside.com 2019 - 2024. All rights reserved.