如何在 vim 中使用正则表达式修剪 xml 标签中的任意数量的空格?



我正在尝试修剪XML标签中的空格,这是我拥有的示例:

<xmlT ag>
content between tag
</xmlTa g>

自:

<xmlTag>
content between tag
</xmlTag>

(这是记事本++这个问题的副本,但包括一个不明显的vim解决方案。

注意:该解决方案还应处理多个空格,例如:

<messed up t ag>

这将成为

<messseduptag>

为Notepad++提供的答案包括使用vim不支持的符号[sw]

结合这两个答案,再加上了解如何在 vim 中执行积极的前瞻,您可以在 vim 中使用此表达式去除 xml 标记中任意数量的空格:

:%s/s+([[:space:][:alnum:]_]*>)@=//gc

解释:

我们正在寻找空格(s)一次或多次(+),在它前面(@=)还有一个空格或字母数字字符或下划线(([[:space:][:alnum:]_]*>))零次或多次(*),后跟一个>。我们将在整个文件(g)中将一个或多个空格字符(即表达式开头的s+)替换为无任何东西(//),并在替换任何内容之前要求确认(c)。

以下简单的替换命令适用于第一个示例:

%s/(</*xmlw+)s+/1/g 

更一般的替换将从任意 XML 标记中删除任意数量的空格

:%s/<zs.*ze>/=substitute(submatch(0),' ','','g') 

最新更新