VSCode(TextMate)语言语法:默认的样式名称是什么?

编程语言 2026-07-10

简要结论:在 language grammar 内,默认样式的名称是什么?

*.tmLanguage.json 语言语法中,匹配到的每个模式都可能覆盖父元素的样式,通过指定一个 name,在此次匹配时叠加在父元素的样式之上。例如,name 可能是类似 "variable.parameter.cpp" 的东西。

VS Code的主题随后为每个 name 指定样式(颜色、字体等)。

我希望在语法的某个元素内部,回到默认样式(不应用来自父元素名称的任何额外样式)。

在标准名称(命名约定部分)中,没有一个名字表示“带默认样式的纯文本”或类似的等价说法。

我查看了 默认的VS Code主题,也没有找到任何能对应此的名字。

或者,是否有办法在 *.tmLanguage.json 语言语法中,指定某些东西以移除所有父元素的名字?

此外,我想避免修改默认主题。这将阻止我在自定义主题中为新名字指定默认样式,并将新名字与该默认样式关联(原因是用户可以保留他们偏好的主题)。

更多细节

Grammars不具备样式,主题才有样式:语法规则有 "name",而主题中有为名称范围指定的样式。 对给定文本应用的作用域和样式,可以通过命令 "Developer: Inspect Editor Tokens and Scopes" 查看。

因此,在我的语法中,应该使用什么名字,才能让主题选择默认的编辑器样式?

示例

C语言注释中的Doxygen标签的语法高亮:

语法 c.tmLanguage.json(摘录):

{
    "scopeName": "source.c",
    "repository": {
        "comments": {
            "patterns": [
                {
                    something that matches the // comments
                    "name": "comment.line.double-slash.documentation.c",
                    "patterns": [
                        {
                            something that matches the Doxygen tags
                            "name": "storage.type.class.doxygen.c"

在主题 dark_vs.json 中,颜色被指定为:

            "scope": [
                "storage.type"
            ],
            "settings": {
                "foreground": "#ff7b72"
            }

如果我想让Doxygen标签应用默认的编辑器样式: 我不能移除 "name": "storage.type.class.doxygen.c",因为作用域选择会回退到 "comment.line.double-slash.documentation.c"(注释的颜色将被应用)。

解决方案

不确定你为什么要重置字体颜色 通常,语法高亮尽量避免使用默认的字体颜色

但你确实要看你正在使用的主题, 很多主题确实有 meta.embedded,会重新应用默认字体颜色, 所以那将是你最好的选择

meta.embedded 也会把 fontStylestandard token type 重置回 other 它通常用于嵌入另一种语言/嵌套特性

否则就简单地使用 variable/variable.other

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章