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