匹配tmLanguage和tmTheme文件之间的标识符

时间:2016-08-14 12:08:34

标签: visual-studio-code vscode-extensions tmlanguage

我试图了解Visual Studio Code如何匹配主题和语言文件之间的标识符。例如,在一个tmLanguage文件中,我有一个这样的定义:

...
            <dict>
                <key>begin</key>
                <string>'</string>
                <key>beginCaptures</key>
                <dict>
                    <key>0</key>
                    <dict>
                        <key>name</key>
                        <string>punctuation.definition.string.begin.java-or-c</string>
                    </dict>
                </dict>
...

dict包含标识符 punctuation.definition.string.begin.java-or-c 以标识单引号字符串的开头。现在查看我所拥有的tmThemes文件之一,这个标识符从未被提及,实际上我可以想象语言文件编写者可以自由使用他们想要的任何标识符。但是如何将主题与它们匹配,以便VS Code知道应用哪种颜色?是否存在描述该过程的文档?

2 个答案:

答案 0 :(得分:2)

有一些conventions(滚动使用的标识符,以便主题可用于多种语言 所以基本上你是对的,编写语言文件的人在理论上完全免费使用他喜欢的任何标识符但是那时可能还需要一个附带的主题文件。

您可能还想查看以下答案:
Are there any standards for tmlanguage keyword types?

答案 1 :(得分:0)

Visual Studio Code显然使用TextMate中的样式方法,因此在TextMate中应用的大部分内容(例如主题和语言定制)在VS Code中也是有效的。匹配类似于CSS选择器,如Scope Selectors文档中所述。简而言之:主题文件包含某些范围的颜色值(例如DAXaholic提到的那些)。这些部分或完全与语言文件中指定的范围匹配,例如,范围“字符串”匹配所有“string.quoted”范围等。

进一步阅读,尤其是语言+主题文件应该支持的范围,可以在页面上完成:Writing a TextMate Grammar: Some Lessons Learned,它还提到了标准范围列表。