修改HTML标签的Sublime文本语法突出显示

时间:2013-12-29 05:20:46

标签: sublimetext2 sublimetext color-scheme

我为Sublime Text 2尝试了很多配色方案,我发现了一个看起来很适合javascript和php的数字,但是它们在HTML中的文本和标签之间也存在着可怕的区别。

我要做的是将HTML标记与相同颜色作为开始和结束标记(<>)。现在,左右V形显示与纯文本相同的颜色,可能令人眼花缭乱。

Bad syntax colouring in "Frontier" 配色方案Frontier

实现它不是配色方案,而是HTML的语法定义,我查看~/Library/Application Support/Sublime Text 2/Packages/HTML/HTML.tmLanguage进行修改。

问题是,XML文件中充斥着&gt;&lt;,除unofficial documentation for syntax definitions之外没有文件本身的文档。任何人都知道如何将开始和结束标记定义合并为标记本身?

另一个选择当然是编辑我喜欢的每个主题,并确保标签和chrevrons的颜色相同,但我认为全局编辑在我的情况下更有意义。

Better syntax highlighting in "Phoenix Dark Blue" 配色方案Phoenix Dark Blue

例如,Phoenix Dark Blue通过使用以下定义

解决了这个问题
<dict>
    <key>name</key>
    <string>Variable, String Link, Tag Name</string>
    <key>scope</key>
    <string>variable, support.other.variable, string.other.link, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>
    <key>settings</key>
    <dict>
        <key>foreground</key>
        <string>#787878</string>
    </dict>
</dict>

2 个答案:

答案 0 :(得分:5)

如果发生其他.tmLanguage相关紧急情况,请留意TextMate ManualLanguage Grammars section。他们的例子是JSON:一种比PLIST更具可读性的格式,但不是Sublime Text可以正确使用的东西。 ST2和ST3用户可以使用PackageDev编辑YAML中的语法。

正如您所提到的,并且正如我的正则表达式搜索&(g|l)t;所证实的那样,Sublime中有太多 <>个标记分隔符文本2(构建2221)HTML.tmLanguage语法文件。一些HTML标签和古怪的正则表达式标签上下文如此特殊,它们保证了一个独特的表示形式,不幸的是,我们包括重新指定标签分隔符的范围和上下文,<>,而不是挂钩到一些通用的不等号符号范围选择器。

幸运的是, &lt;&gt;的每个实例的范围名称为punctuation.definition.tag.???.html,其中???可能为begin },end,或者什么也没有。同样,每个HTML标记(html中的<html>)的命名与entity.name.tag.html非常相似。财富值得赞扬,现在是正则表达的时候了!

在你的HTML.tmLanguage文件中 - 为了安全起见,我实际建议将新版本克隆到Packages/User,尽管你必须重命名文件和语法 - 执行正则表达式使用以下方法搜索所有违规范围名称

punctuation\.definition\.tag.*(?=</string>)

...并使用与标记本身Ctrl+V相同的名称替换每个结果(这应该只有一个entity.name.tag.html)。在我的测试中,我还添加了另一个子范围tag以防我以后需要找到替换项,所以它看起来像这样:

entity.name.tag.delimiter.html

我已经使用ST2的默认配色方案对其进行了测试,与其他精心编写的主题配合使用。这是Dayle Rees' Frontier

Frontier

它甚至适用于Sublime Text 3!

答案 1 :(得分:0)

不再支持ST2(或据我所知,正在运行)。这是一个快速的ST3解决方案。

要自定义“标记”尖括号的颜色,必须使用前景键和颜色字符串为标记活动创建dict范围。这是正确的语法。

<dict>
<key>name</key>
<string>tag</string>
<key>scope</key>
<string>entity.name.tag, punctuation.definition.tag.begin, punctuation.definition.tag.end</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCCCAA</string> <!-- custom tag color here -->
</dict>
</dict>

此范围说明here

探索here的更多范​​围。