如何在Vim中的CDATA元素中语法高亮显示XML?

时间:2010-04-26 12:22:41

标签: xml vim syntax-highlighting

Vim的XML / XSL语法高亮很棒,除了它关闭了CDATA区域中的所有语法高亮。有没有办法打开CDATA区域的语法高亮?

在工作中,我们在其他XML文档中嵌入了大量XSL代码。如果我能够为嵌入式XSL代码获得XML编辑的所有优点而且不必临时删除CDATA标记,或将CDATA内容复制到临时文件中,那将是很棒的。

示例:

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

XSL始终包含在内,因此可以匹配。

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

3 个答案:

答案 0 :(得分:2)

syntax include指令专门用于完成此类操作,xml.vim(在最新版本中,您的可能不同)有一个名为xmlCdataHook的“挂钩”群集,您可以使用您自己的语法文件覆盖。

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

syn include @xmlCdataHook <sfile>

这为您提供了CDATA部分中突出显示的xml语法。指向另一个文件,例如<sfile>:p:h/javascript.vim,以便突出显示javascript。

或者,您可以避免编辑xml.vim文件,只需为CDATA部分添加自己的语法挂钩:

syntax include @JS $VIMRUNTIME/syntax/javascript.vim
syntax region start=/\V<![CDATA[/ end=/\V]]>/ contains=@JS

答案 1 :(得分:0)

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

为了处理嵌入式javascript(对我而言似乎风险较小),您还需要创建一个修改过的语法高亮显示器。开始寻找有关如何执行此操作的信息的好地方是vim的XHTML语法高亮显示器 - 支持嵌入式语言

答案 2 :(得分:0)

这是不可能的。

我已经将这个问题保持开放9个月而没有任何进展,我自己的研究发现没什么用处。因此,我别无选择,只能断言它根本不可能。