vscode中无现成“配色文件属性列表”,需用命令“developer: inspect editor tokens and scopes”实时查看生效的颜色作用域与值;workbench.colorcustomizations改ui色,editor.tokencolorcustomizations配语法高亮,均需精确scope和格式。

VSCode 里没有“配色文件属性列表”这个现成的菜单项,所有颜色配置都分散在主题 JSON、workbench.colorCustomizations 和 editor.tokenColorCustomizations 三类地方,必须手动查或用命令定位。
怎么快速看到当前生效的颜色配置项
直接打开命令面板(Ctrl+Shift+P 或 Cmd+Shift+P),输入并执行:Developer: Inspect Editor Tokens and Scopes。光标点到代码任意位置,右侧弹出面板会显示该处所有嵌套的作用域(如 support.type.python、keyword.control)和当前实际渲染的颜色值(十六进制)。这不是“属性列表”,但它是唯一能实时告诉你「哪条规则正在起作用」的官方方式。
- 它不显示全局配置名,只显示最终计算出的 foreground/background 值
- 作用域从上到下由细到粗,最上面那条才是你该去改的 scope
- 如果某段文字颜色没变,大概率是更上层的作用域(比如
string)覆盖了你想改的子 scope(比如string.quoted.double.python)
workbench.colorCustomizations 能改哪些 UI 颜色
这是改界面元素颜色的地方,比如侧边栏、标签页、状态栏——所有带 workbench. 前缀的颜色项都归这儿管。常见可配项包括:
-
editor.background:编辑器主区域背景色(不是代码高亮) -
tab.activeBackground:当前激活标签页背景色(需配合[language-id]才能按语言区分) -
diffEditor.insertedTextBackground:Git 对比中新增文本的背景色(支持 8 位 hex 如#a3e63580) -
activityBar.foreground:左侧活动栏图标的颜色 - 注意:所有 key 必须拼写完全准确,大小写、连字符都不能错;值必须是十六进制(
#rrggbb或#rrggbbaa),不支持rgb()或命名色
editor.tokenColorCustomizations 怎么配语法高亮颜色
改代码本身的颜色(关键字、字符串、注释等)得用这个,它基于 TextMate scope 规则匹配。最稳妥的写法是:
{
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "keyword.control",
"settings": {
"foreground": "#ebf804"
}
},
{
"scope": "string",
"settings": {
"foreground": "#22c55e"
}
}
]
}
}
-
scope字段必须填对,推荐先用Developer: Inspect Editor Tokens and Scopes复制真实 scope - 不要盲目填
keyword这种宽泛 scope,容易误伤其他语言;优先用带语言后缀的,如keyword.control.python - 如果改了没反应,检查是否漏了
"textMateRules": []这层包装,或者settings.json里有语法错误(比如逗号多写、引号没闭合) - 第三方主题可能禁用部分 token 自定义,此时需在
[theme-name]下嵌套写,例如:"[One Dark Pro]": { "editor.tokenColorCustomizations": { ... } }
为什么改了颜色却看不到效果
最常见的三个干扰源:
- 工作区设置(
.vscode/settings.json)覆盖了用户级设置,导致你改的workbench.colorCustomizations完全不加载 - 用了错误的主题 ID:比如菜单里看到 “One Dark Pro”,但
settings.json里写成了"one-dark-pro"或"OneDark Pro"(必须跟扩展贡献的 ID 完全一致,可在扩展页的Contributions → themes查) - 颜色被更高优先级规则覆盖:比如你在
textMateRules里改了comment,但当前主题的comment.line更具体,且未被你显式覆盖
真正难的不是写配置,而是判断「此刻哪个 scope 正在生效、它来自哪个文件、有没有被别的规则压制」——这需要反复用 Inspect Editor Tokens and Scopes 点击验证,而不是靠猜。











