如何在Vim中语法突出显示CDATA元素中的XML?

如何在Vim中语法突出显示CDATA元素中的XML?,xml,vim,syntax-highlighting,Xml,Vim,Syntax Highlighting,Vim对XML/XSL的语法突出显示非常好,只是它关闭了CDATA区域中的所有语法突出显示。有没有办法在CDATA区域中启用语法高亮显示 在工作中,我们在其他XML文档中嵌入了大量XSL代码。如果我能够在不需要临时删除CDATA标记或将CDATA内容复制到临时文件的情况下,也能获得嵌入XSL代码的XML编辑的所有好处,那就太好了 例如: <root> <with type="xsl"><![CDATA[ <xsl:template match=

Vim对XML/XSL的语法突出显示非常好,只是它关闭了CDATA区域中的所有语法突出显示。有没有办法在CDATA区域中启用语法高亮显示

在工作中,我们在其他XML文档中嵌入了大量XSL代码。如果我能够在不需要临时删除CDATA标记或将CDATA内容复制到临时文件的情况下,也能获得嵌入XSL代码的XML编辑的所有好处,那就太好了

例如:

<root>
  <with type="xsl"><![CDATA[
      <xsl:template match="/">
          <!-- XSL content here -->
      </xsl:template>
   ]]>
  </with>
</root>

]]>
XSL总是包含在中,因此有一些东西需要匹配


我们有时还会在CDATA区域中嵌入Javascript。为这些区域打开Javascript语法高亮显示会很好。

您需要修改vim附带的语法高亮显示脚本(在我的系统上,它位于
/usr/share/vim/vim72/syntax/xml.vim
中)。但是,我很确定这是一个坏主意-您将在“错觉”下操作,即CDATA部分的内容实际上是XML,而它绝对不是XML-因为它在CDATA部分中只是文本

为了处理嵌入式javascript(对我来说风险较小),您还需要创建一个修改过的语法高亮。一个开始寻找如何做到这一点的信息的好地方是vim的语法高亮显示-它支持嵌入式语言

这是不可能的


我把这个问题留了9个月没有任何进展,我自己的研究也没有发现任何有用的东西。因此,我别无选择,只能断定这根本不可能。

syntax include指令专门用于完成这类任务,
xml.vim
(在最近的版本中,您的可能有所不同)有一个名为
xmlcatahook
的“hook”集群,您可以用自己的语法文件覆盖它

打开
xml.vim
语法文件并添加此行:

syn include @xmlCdataHook <sfile>

看起来您可以通过将修改放在
~/.vim/after/filetype.vim
文件中来扩充语法文件。因此,我可以通过创建
~/.vim/after/xml.vim
来更改xml的语法突出显示规则。我只是不知道该在文件中放什么…啊,我忘了那个文件(我现在已经从大部分vim转移到大部分GUI编辑器)。这可能是你应该在vim邮件列表上问的一个问题,我怀疑我尝试过这个,但它不起作用。CDATA部分中的XML继续被视为纯文本。我应该用什么替换吗?不,指的是“这个文件”。好的,知道我为什么不能让它工作吗?我在Ubuntu 11.10上使用Vim 7.3。
syntax include @JS $VIMRUNTIME/syntax/javascript.vim
syntax region start=/\V<![CDATA[/ end=/\V]]>/ contains=@JS