VSCode颜色配置分三层:workbench.colorCustomizations改UI背景色,须在settings.json顶层用官方token;editor.tokenColorCustomizations改语法高亮,依赖TextMate scope;editor.semanticTokenColorCustomizations改语义高亮,需语言服务器支持。

VSCode 没有“设置颜色方案”这个统一入口,所有颜色控制都依赖三类独立配置项,混用或错放位置就会静默失效。
workbench.colorCustomizations 改界面背景和边框色
这是改标题栏、侧边栏、状态栏、编辑器背景等 UI 区域颜色的唯一合法方式。它不碰代码文字本身,只管“外壳”。
- 必须写在
settings.json顶层,不能嵌套在其他对象里(比如不能塞进editor或workbench字段内部) - 键名必须是官方定义的 token,例如
editor.background、sideBar.background、statusBar.background,拼错或自造名称无效 - 值推荐用十六进制格式(如
"#1e1e1e"),避免用命名色(如"darkgray"),部分语言插件不识别 - 如果改完没反应,先用
Ctrl+Shift+P→Developer: Toggle Developer Tools,在 Console 里执行JSON.stringify(monaco.editor.getThemeData())看实际生效值
editor.tokenColorCustomizations 改代码文字颜色
这才是真正控制注释、字符串、关键字、函数名等语法高亮的地方,靠的是 TextMate scope 匹配,不是“选个颜色主题”就能覆盖的。
- 必须用
textMateRules数组形式,每条规则含scope和settings,例如:{"scope": "comment.line.double-slash", "settings": {"foreground": "#647f4c"}} -
scope不能靠猜,必须用Ctrl+Shift+P→Developer: Inspect Editor Tokens and Scopes,把光标停在目标代码上实时取——比如 JS 字符串可能是string.quoted.double.js,Python 是string.quoted.single.python - 别写
"string"这种宽泛 scope,容易跨语言误匹配;也别漏掉settings.foreground字段,否则规则被忽略 - 第三方主题(如 One Dark Pro)自带
tokenColors,会压制你的规则;临时切回Default Dark+测试是否生效
editor.semanticTokenColorCustomizations 改语义级高亮
当语言服务器(LSP)能真正区分“这个 name 是参数、那个 name 是属性”时,这套配置才起作用,优先级高于 tokenColorCustomizations。
- 结构类似,但用的是
semanticTokenColors字段,例如:{"variable.parameter": {"foreground": "#ff9e6d"}} - 常见语义 token:
variable.parameter、function.declaration、class.name、interface.name - 不是所有语言都启用语义高亮,默认关闭;需确认对应语言插件支持,并在设置中开启:
"editor.semanticHighlighting.enabled": true - 如果改了没反应,大概率是当前语言没触发语义分析,或者你写的 token 名称不在该语言支持列表里(查插件文档)
真正难的不是写哪一行,而是搞清你到底想改哪一层——是让整个窗口变暗(workbench.colorCustomizations),还是让 const 关键字变红(editor.tokenColorCustomizations),又或者让函数参数和局部变量用不同颜色(editor.semanticTokenColorCustomizations)。这三层彼此隔离,写错位置就等于没写。


















