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

时间:2019-03-16 16:48:24

标签: regex vim

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

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

收件人:

<xmlTag>
content between tag
</xmlTag>

(这是Notepad ++的this question的副本,但其中包括一个不明显的vim解决方案。)

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

<messed up t ag>

将会变成

<messseduptag>

2 个答案:

答案 0 :(得分:0)

为Notepad ++提供的answer包括使用[\s\w]标记,该标记在vim中为not supported

结合两个答案以及对如何执行positive lookahead in vim的理解,您可以在vim中使用此表达式在xml标记内剥离任意数量的空格:

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

说明:

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

答案 1 :(得分:0)

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

%s/\(<\/*xml\w\+\)\s\+/\1/g 

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

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