扩展语法中的自动完成结束 HTML 标记

Auto-Complete Closing HTML Tags in Extended Syntax

我目前正在为我自己的模板引擎开发一个语法高亮插件。文件中的内容基于标准 HTML 语法突出显示,通常在 Sublime Text.

中看到

完成这个绝对不是问题:

...
contexts:
  main:
    - include: 'scope:text.html.basic'
...

如您所见,语法突出显示是使用(合理的)新 .sublime-syntax YAML 编写的。突出显示代码中我想突出显示的部分,以及使用其他编程语言突出显示某些部分也不是问题。

我似乎无法弄清楚,但是,如何使 HTML 标记 'auto-complete' 与设置语法时的方式相同到常规 HTML.

例如,如果输入以下内容:

<html>

然后输入:

</

它将自动解析为结束 </html> 标记(前提是中间没有其他标记)。

这是否放在另一个文件中?也许是某种 "plugin definitions file"?

任何正确方向的指示都将不胜感激。从我迄今为止所做的研究来看,我似乎无法找到关于特定主题的任何内容。

执行此操作的命令是 close_tag 并使用以下键绑定触发:

// HTML, XML close tag
{ "keys": ["/"], "command": "close_tag", "args": { "insert_slash": true }, "context":
    [
        { "key": "selector", "operator": "equal", "operand": "(text.html, text.xml) - string - comment", "match_all": true },
        { "key": "preceding_text", "operator": "regex_match", "operand": ".*<$", "match_all": true },
        { "key": "setting.auto_close_tags" }
    ]
}

此处列出的第一个上下文要求文件的语法为 text.hmltext.xml,但在字符串或注释中则不需要。

当您像上面那样 include 范围时,应用于匹配文本的范围取自您包含的范围,但顶级范围是在您的语法定义中定义的范围。

因此,如果您使用 Tools > Developer > Show Scope Names 命令检查作用域,您可能会发现顶级作用域不是 text.html 而是其他东西(上面的语法定义不是不要说那可能是什么)。

如果您在自己的包中使用修改后的范围复制自定义绑定,它应该可以满足您的要求。