Vim - 删除XML注释

时间:2009-11-12 14:32:30

标签: xml vim

如何删除XML中的注释?

如果开始和结束评论标签位于同一行,我使用:g/^<!--.*-->$/d删除评论。如何删除分布在多行中的注释?

5 个答案:

答案 0 :(得分:18)

\_.代替.允许匹配所有字符,包括换行符。但是这一点会导致正则表达式引擎过度,因为默认情况下正则表达式是贪婪的。使用\{-}代替*进行非贪婪的匹配。

由于g/ /d命令只删除一行(即使是多行匹配),最好切换到s/ / /g(替换全局)。

:%s/<!--\_.\{-}-->//g

答案 1 :(得分:2)

您应该使用XSLT将文件转换为新文件。您可以将身份转换与其他规则一起使用,以便不复制注释。

<xsl:template match="node()|@*">
   <xsl:copy>
     <xsl:apply-templates select="@*"/>
     <xsl:apply-templates/>
   </xsl:copy>
 </xsl:template>

<xsl:template match="comment()"/>

你可以在Linux上的libxslt包中使用“xsltproc”来做这个脚本,我想你可以从vim执行。

答案 2 :(得分:2)

天儿真好,

不输入

da>

当光标放在注释块的某个位置时删除注释?

你必须在编译时启用带有textobjects的vim。输入:

:vers

会让你看看你的构建中是否启用了textobject。

有很多这些时髦的文字选择。看看relevant page in the docs

修改:您可能需要添加

set matchpairs+=<:>

到.vimrc,以便工作。

HTH

欢呼声,

答案 3 :(得分:0)

我相信这应该有效:

:g/<!--.*?-->/d

问号使星号“懒惰”而不是“贪婪”,这意味着它将尽可能少地匹配以满足表达式。这可以防止表达式删除此示例的中间部分:

We want to keep this<!-- This is a comment -->We also want to keep this<!-- Another comment -->

编辑:看起来正则表达式的vim风格不支持*?懒惰匹配。我的坏。

答案 4 :(得分:0)

如果它不是太麻烦你在你的系统上傻了。你可以试试这个

$ more file
<!--
asdlfj
sdjf
;jsgsdgjasl -->
text i want
i want
....
<!-- junk junk -->
i want text
anthor text
end

$ gawk -vRS='-->' '{ gsub(/<!--.*/,"")}1' file


text i want
i want
....


i want text
anthor text
end