VSCode主题配色必须通过settings.json中workbench.colorCustomizations和editor.tokenColorCustomizations配置,改CSS文件无效;未生效主因是JSON格式错误、主题锁死token颜色(如Nord)、textMateRules顺序冲突或scope不准确,需用开发者工具查真实scope并精确匹配。

为什么改了 settings.json 没生效?先查这三处
改完颜色却没变,不是 VSCode 抽风,而是配置被静默忽略:
- JSON 格式错误:多逗号、少引号、括号不匹配——VSCode 设置面板右下角会显示黄色感叹号,但容易被忽略;建议粘贴进
JSON.parse()工具验证 - 主题锁死 token 颜色:像
Nord、One Dark Pro这类第三方主题在 package.json 里写了"_defaults": true,会无视你写的editor.tokenColorCustomizations;换用官方Dark+ (default dark)先验证是否生效 - 规则顺序冲突:多个
textMateRules匹配同一 token 时,后定义的规则覆盖前一个;用Developer: Inspect Editor Tokens and Scopes查看最终生效的 rule 序号,再调整数组顺序
改括号、关键字、字符串颜色必须用 textMateRules + 真实 scope
语法高亮颜色不是靠改 CSS 类名或瞎猜 scope 名称,比如写 "string" 可能完全不生效,因为 TypeScript 字符串实际是 string.quoted.double.ts,Python 是 string.quoted.single.python。
- 把光标停在目标代码上 → 按
Ctrl+Shift+P→ 运行Developer: Inspect Editor Tokens and Scopes→ 看右上角显示的完整 scope 列表 - scope 值必须写进
textMateRules的scope字段,例如:["keyword", "storage.modifier"] - 加
language字段限定范围更稳妥,避免 JS/Python/TS 全部被波及,例如只改 Python 的def:{"language": "python", "scope": ["keyword"], "settings": {"foreground": "#c586c0"}} - 别用
foreground覆盖所有语言;否则 HTML 的<div>和 Python 的def会共用一个颜色,语义混淆
改侧边栏、状态栏、当前行背景等 UI 色,只认 workbench.colorCustomizations
UI 元素颜色和语法高亮完全隔离,混写在一个对象里会直接失效。例如想改括号匹配背景色,该用 editorBracketMatch.background,不是 bracketMatchBackground,也不是塞进 editor.tokenColorCustomizations 里。
- 键名大小写敏感且不可缩写:
activityBar.foreground≠activitybar.foreground - 值支持十六进制(
"#2d2d2d")、rgba("rgba(45,45,45,0.9)")、甚至引用内置变量("editor.background") - 常见可配项:
sideBar.background、statusBar.background、editor.lineHighlightBackground、editorBracketMatch.background - 工作区级
settings.json中的workbench.colorCustomizations会**完全屏蔽**用户级设置,别在两个地方同时写


















