直接改 settings.json 中的 editor.tokenColorCustomizations 即可生效,必须写在顶层、用 textMateRules 配置精准 scope(如 support.function.console.js),颜色值用 #rrggbb,避免命名色;scope 须通过 Developer: Inspect Editor Tokens and Scopes 实时获取,不可猜测或复用旧配置。

直接改 settings.json 里的 editor.tokenColorCustomizations 就行
VSCode 的代码颜色(不是界面、不是图标、不是 Git 状态)只能通过 editor.tokenColorCustomizations 覆盖,其他地方写都无效。它不依赖插件,也不需要打包主题,改完保存即生效。
- 必须写在用户级或工作区级的
settings.json顶层对象里,不能嵌套在workbench.colorCustomizations或其他字段下 - 推荐用
"textMateRules"数组形式,兼容性比旧版tokensColors更好 - 每条规则必须同时含
scope和settings,缺一不可;settings至少要有foreground字段 - 颜色值推荐用
#rrggbb或#rrggbbaa,避免用命名色(如red),部分语言插件不识别
示例(让 JavaScript 中的 console.log 变红):
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "support.function.console.js",
"settings": {
"foreground": "#ff6b6b"
}
}
]
}
查 scope 别猜,用 Developer: Inspect Editor Tokens and Scopes
你看到的每个词(比如一个 const、一对引号、一段注释)都有唯一且动态生成的 TextMate scope 链,它取决于当前语言模式、插件版本、甚至光标位置。文档、博客、别人配置里的 scope 很可能已经失效或不匹配。
- 快捷键:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入并执行Developer: Inspect Editor Tokens and Scopes - 光标必须停在目标代码上(比如想调字符串颜色,就停在引号内)
- 面板顶部显示的是最具体 scope(如
string.quoted.double.tsx),往下是逐级宽泛的 fallback(如string.quoted→string) - 优先选最上面那条——它匹配最准、性能最好、不易被其他规则覆盖
常见误配:
- 写
keyword而不是keyword.control.ts:前者会跨语言污染 Python/HTML 的关键字 - 写
variable而不是variable.other.readwrite.js:前者在大文件中明显卡顿
editor.tokenColorCustomizations 和 workbench.colorCustomizations 别混
这两者完全无关,写错位置是“改了没反应”的头号原因。
-
workbench.colorCustomizations只管 UI:侧边栏背景、状态栏、活动标签页、编辑器背景、行号、光标、错误波浪线……但不管任何代码文本的颜色 -
editor.tokenColorCustomizations只管代码文本:关键字、字符串、注释、函数名、括号、数字等,基于语法分析打上的 scope 标签 - 如果你在
workbench.colorCustomizations里写了string或keyword,VSCode 完全无视,也不会报错,只是沉默跳过
检查方法:打开设置 JSON,确认 editor.tokenColorCustomizations 是和 workbench.colorCustomizations 并列的顶层字段,不是它的子字段。
第三方主题可能静默覆盖你的规则
One Dark Pro、Nord、Material Theme 等主流主题自带完整的 tokenColors 定义,它们的优先级通常高于你的 editor.tokenColorCustomizations,导致你配了半天没效果。
- 临时验证:切换到 VSCode 自带的
Default Dark+主题,看配置是否立刻生效 - 若确认是主题覆盖,可尝试关闭其语法强化开关,例如:
- 对 Nord:加
"nord.enforceSyntaxHighlighting": false - 对 One Dark Pro:设
"oneDarkPro.editorTheme": "none"(具体键名以插件文档为准)
- 对 Nord:加
- 更彻底的办法:禁用主题插件,只用 VSCode 原生主题 + 自定义规则,稳定性最高
语义高亮(editor.semanticTokenColorCustomizations)也会影响结果,但它依赖语言服务器,优先级更高;如果你启用了 TypeScript 或 Python 的语义高亮,某些符号(如变量名)可能根本不走 TextMate 规则——这点容易被忽略。


















