必须在settings.json顶层配置editor.tokencolorcustomizations才能生效,常见原因:scope写错(需用inspect工具获取准确scope)、配置位置错误(不能放workbench.colorcustomizations内)、被第三方主题覆盖(可切default dark+测试)。

editor.tokenColorCustomizations 才生效,其他地方调颜色基本没用。
为什么改了 settings.json 却没反应
VS Code 不报错,只沉默忽略。常见原因就三个,按顺序排查最省时间:
-
scope写错了:比如想改注释,填"comment"可能不够准,实际得是"comment.line.double-slash.ts"或"comment.block.python";必须用Developer: Inspect Editor Tokens and Scopes实时取,光标停在目标代码上,看面板顶部第一个scope - 配置位置错了:不能塞进
workbench.colorCustomizations,也不能写在用户界面设置里;必须是settings.json的顶层字段,且结构是"editor.tokenColorCustomizations": { "textMateRules": [] } - 被第三方主题覆盖了:One Dark Pro、Nord 等自带
tokenColors,会压过你的规则;临时切回Default Dark+测试,或关掉对应开关(如"nord.enforceSyntaxHighlighting": false)
怎么拿到真正有效的 scope
别查文档、别猜、别复制网上“通用示例”——90% 都过时或不匹配你当前语言插件。
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac),输入并执行Developer: Inspect Editor Tokens and Scopes - 把光标停在目标代码上(比如一个
const、一段// 注释、一对双引号字符串),面板立刻显示完整scope链 - 选最上面那一行(最具体),比如
keyword.control.js而不是笼统的keyword;不同语言插件注册的scope完全不同,Python的keyword和TS的keyword不互通
如何只对特定语言单独调色
全局规则容易误伤,比如改了 string,结果 JS 模板字符串和 Python 字符串一起变红。VSCode 支持语言专属覆盖,但写法必须严格:
- 外层 key 是带方括号的语言标识符,如
"[python]"、"[typescriptreact]"(不是ts或tsx) - 里面再嵌一层
"editor.tokenColorCustomizations",不能直接写textMateRules - 示例:
"[python]": { "editor.tokenColorCustomizations": { "textMateRules": [ { "scope": "string", "settings": { "foreground": "#4CAF50" } } ] } } - 注意:如果同时启用了语义高亮(
"editor.semanticHighlighting": true),它可能覆盖textMateRules,必要时可关掉
editor.tokenColorCustomizations 与 workbench.colorCustomizations 别混用
这是最容易踩的坑:两个配置项管的事完全不重叠。
-
editor.tokenColorCustomizations只管代码内容本身——keyword、string、comment、function这些语法单元的颜色和亮度;值必须是十六进制(如"#e06c75")或rgba()(如"rgba(224, 108, 117, 0.9)"),不能写"red"或"lightcoral" -
workbench.colorCustomizations控制所有非代码区域:状态栏、活动标签页、IntelliSense 提示框(editorSuggestWidget.*)、Diff 面板(diffEditor.*)、终端边框等;比如加"workbench.contrastBorder": "#000000"可以加粗所有面板边界 - 深色主题下慎用纯白
"#ffffff"做字符串色——刺眼;浅色主题下避免"#000000"关键字——边缘发虚;推荐用 WebAIM Contrast Checker 验证对比度是否 ≥ 4.5:1











