【问题标题】:How to inherit CDATA syntax in XML files from HTML syntax in Sublime Text 3?如何从 Sublime Text 3 中的 HTML 语法继承 XML 文件中的 CDATA 语法?
【发布时间】:2016-01-24 03:35:08
【问题描述】:

我正在尝试为 XML 文件创建一个新的 sublime-syntax,它将 CDATA 中的标签视为 HTML。 我创建了一个新的 sublime-syntax 文件,复制了原始 XML 规则(通过 PackageResourceViewer 打开它们)并找到了我感兴趣的部分:

contexts:
  main: 
    - match: '<!\[CDATA\['
    captures:
      0: punctuation.definition.string.begin.xml
    push:
      - match: "]]>"
        captures:
          0: punctuation.definition.string.end.xml
        pop: true

这是我想在push: 下立即添加的两行

      - meta_scope: text.html.basic
      - include: text.html.basic

我希望继承所有 text.html.basic 规则,但我观察到行为或颜色语法没有变化。通过行为,我的意思是我想让自动关闭标签遵循 HTML 规则。也就是说,如果我的光标在下面的示例中位于 John Q. Public 的末尾并且我按 Tab 键,我想得到一个结束的 &lt;/p&gt; 标签,而不是 &lt;/Body&gt;(这是正在发生的事情)。

<Body><![CDATA[
  <div class="to">
    <p>John Q. Public|
  </div>
]]></Body>

我做错了什么?

【问题讨论】:

  • 查看Packages/HTML/HTML.sublime-syntax 了解嵌入其他语言(CSS、JS)的一些示例。

标签: html xml sublimetext3 sublimetext


【解决方案1】:

感谢@MattDMo,这种方法奏效了。这是我想出的:

- match: <!
  captures:
    0: punctuation.definition.tag.html
  push:
    - meta_scope: meta.tag.sgml.html
    - match: ">"
      pop: true
    - match: '\[CDATA\['
      push:
        - include: 'HTML.sublime-syntax'
        - meta_scope: text.html.basic
        - match: "]](?=>)"
          pop: true
    - match: (\s*)(?!--|>)\S(\s*)
      scope: text.html.basic

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 2016-12-08
    • 1970-01-01
    • 2013-08-10
    • 2015-11-20
    • 2013-12-21
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多