如何“覆盖” VSCode 主题的语义标记类型

问题描述

我想知道如何调整我的 VSCode 主题(One Dark Pro),一个带有语义突出显示主题

我无法覆盖其某些语义标记类型。

对于大多数主题,我会在 settings.json 中编写:

{
  "editor.tokenColorCustomizations": {
    "textMateRules": [
      {
        "name": "Javascript - Variable/object","scope": [
          "variable.other.object.js"
        ],"settings": {
          "foreground": "#c7452e","fontStyle": "bold italic"
        }
      }
    ]
  }
}

但是对于这个主题(以及其他具有语义观点的主题),我无法覆盖它,就好像我需要在 CSS 中使用 !important 一样。

所以这是我的规则之后我的令牌和范围检查的结果。

enter image description here

如您所见,我的设置确实被读取,但显然不够“具体”以击败语义解释或被它覆盖,并且被忽略(最后三行),而是修改语义标记类型变得普遍。

有没有办法针对每个文本对象范围执行此操作(即不会丢失该精彩主题的其余语义),就像我只想更改该特定项目的颜色一样?

解决方法

因此,当主题突出显示语法时,settings.json 文件优先于设置主题实现的语法突出显示,但是,如果您激活语义突出显示,则主题突出显示您的语法,您的 settings.json 文件优先并覆盖主题,然后语言服务器优先于主题和本地用户、工作区、settings.json 文件。因此,换句话说,您无法覆盖该令牌,因为该令牌已被优先级高于您的配置文件的范围覆盖。话虽如此,如果您不喜欢它,只需关闭语义突出显示(下面的代码片段显示了关闭语义突出显示的配置)。

    /** @file "./.vscode/settings.json" */

    {
        "editor.semanticHighlighting.enabled": false
    }