首页 > 解决方案 > vscode 的语义标记着色不适用于字符串

问题描述

我在settings.json中有这些行:

  "editor.semanticTokenColorCustomizations": {
        "enabled": true,
        "rules": {
          "string": { "foreground": "#ff0000" }, // doesn't work
          "*.declaration": { "bold": true }, // works
        }
  },

请注意,其中有两条规则,但尽管第二条有效,但第一条(为“字符串”着色的规则)不起作用:

在此处输入图像描述

现在,根据herehere,“字符串”令牌确实存在,因此它应该可以工作(除非我遗漏了什么)。

另一个猜测是,可能有一个主题妨碍了我,但我卸载了所有非默认主题,但结果是一样的(声明是粗体的,而字符串没有着色)。

PS:我没有使用 textmate 规则,因为当我尝试令牌检查时,它会以更详细的方式为所有内容建议这么多令牌,但我不想写这么多规则,而我想要的只是一个规则为所有字符串着色。

编辑:我决定也尝试一下 Textmate 方式,字符串的范围是string.quoted.double,但这一次,它不能与之前的规则混用!所以现在着色规则起作用了,而样式不起作用:

  "editor.tokenColorCustomizations": {
      "enabled": true,
      "rules": {
        "*.declaration": { "bold": true }, // doesn't work
      },
    "textMateRules": [
        {
            "scope": "string.quoted.double",
            "settings": {
                "foreground": "#ff0000", // works
            },
        }
    ],
  },

标签: visual-studio-codevscode-settings

解决方案


最后,同时使用 textmate 和语义自定义,并“分开”编写这两个规则似乎有效(textmate 方法是 Visual Studio 代码的旧(原始)标记化方法,而最近添加了语义一个):

  "editor.tokenColorCustomizations": {
    "textMateRules": [
        {
            "scope": "string.quoted.double",
            "settings": {
                "foreground": "#8b7a69"
            }
        }
    ]
  },
  "editor.semanticTokenColorCustomizations": {
        "enabled": true,
        "rules": {
          "*.declaration": { "bold": true },
        }
  },

推荐阅读