Xml 更换vim中的前后管柱

Xml 更换vim中的前后管柱,xml,vim,Xml,Vim,我有一个很大的XML文件,其中包含重要信息,不管作者出于什么愚蠢的原因决定这样做 它类似于以下内容: <book id="cat2" type="t" group="1234"> <!-- Group Name --> <book id='ABC123' type='s'/> <!-- NameOfBookHere --> <book id='etc456' type='s'/> <!-- Harry P

我有一个很大的XML文件,其中包含重要信息,不管作者出于什么愚蠢的原因决定这样做

它类似于以下内容:

<book id="cat2" type="t" group="1234">  <!-- Group Name -->
    <book id='ABC123' type='s'/>   <!-- NameOfBookHere -->
    <book id='etc456' type='s'/>   <!-- Harry Potter -->
    <book id='XYZ234' type='s'/>  <!-- Jurassic Park --> //Notice variable space before the comment tag.
</book>
不幸的是,这会影响属性为
标记,这些标记不是自动关闭的

这意味着我剩下数千个自动关闭的
标记,它们不应该是自动关闭的xml标记。当然,手动移除它们是不可行的


是否有办法根据第一次更换影响的线路进行另一次更换?或者我的问题还有其他解决方案吗?

在第一个捕获组中无需进行替换。只需使用
\=
(使用
magic
)<代码>\=
尽可能多地匹配0或1。类似于Perl的
。e、 g.
:%s\v(/=\>)…
:%s#\v(\>|/\>)\s*\<!--\s*(.{-})\s*--\># name="\2"\1#
:%s#\v(\>|/\>)\s*\<!--\s*(.{-})\s*--\># name="\2"\1#
:%s#\v(/?\>)\s*\<!--\s*(.{-})\s*--\># name="\2"\1#