vscode语法高亮通过editor.tokencolorcustomizations动态覆盖,需在settings.json中配置textmaterules并指定正确textmate scope;用developer: inspect editor tokens and scopes查实际作用域,优先选最具体scope;注意区分keyword/storage.type/support.type等语言相关scope,避免误配;生效前需确认语言模式正确、未被workbench.colorcustomizations或第三方主题覆盖。

怎么改 editor.tokenColorCustomizations 里的颜色
VSCode 的语法高亮不是靠改主题文件硬编码,而是通过 settings.json 中的 editor.tokenColorCustomizations 覆盖。它不修改原始主题,只在运行时叠加一层颜色规则,所以改错也不会让整个编辑器变灰。
常见错误是直接往 workbench.colorCustomizations 里塞语法相关配置——那根本不起作用,那个只管 UI 元素(比如侧边栏、状态栏),不管代码本身。
- 打开设置 → 右上角“打开设置(JSON)”图标,或快捷键
Ctrl+Shift+P→ 输入Preferences: Open Settings (JSON) - 确保最外层是 JSON 对象,然后加字段:
"editor.tokenColorCustomizations": { "textMateRules": [ { "scope": "keyword", "settings": { "foreground": "#ff6b6b" } } ] } -
scope值不能瞎写,得对应 TextMate 语法作用域,比如string、variable、support.function,不是 CSS 类名也不是 JS 关键字列表
怎么查某个词当前的 scope 是什么
你看到一个变量没变色,想调它,但不知道该配哪个 scope?VSCode 自带诊断工具,比翻文档快得多。
把光标停在目标词上(比如一个函数调用、引号里的字符串、或者 const 关键字),按 Ctrl+Shift+P → 输入 Developer: Inspect Editor Tokens and Scopes,回车。右侧弹出面板里会显示完整作用域链,从最具体到最宽泛,类似:variable.other.readwrite.js → variable.other.js → variable.js → variable。
- 优先用最具体的 scope(如
variable.other.readwrite.js),避免误伤其他语言或上下文 - 如果想一并改所有变量,用顶层
variable,但要注意 Python 的self、JS 的this也会被影响 - 字符串常用的是
string(通用)或string.quoted.double.js(JS 双引号),别只写string.double——那不是标准 scope
keyword 和 storage.type 有什么区别
很多人以为 keyword 能管住所有关键字,结果改了发现 function 变色了,let 没变,或者 TypeScript 的 interface 完全不动——这是因为不同语言把关键字分到了不同 scope。
JS/TS 里:if、for、return 属于 keyword;const、let、function 属于 storage.type;interface、type 属于 support.type。Python 则把 def、class 放在 storage.type,而 if、import 在 keyword。
- 别只配一个
keyword就以为万事大吉,至少补上storage.type - TypeScript 用户还得看
support.type和support.class,否则自定义类型和类名不会响应你的颜色 - 如果用了 Prettier 或 ESLint 插件,它们不影响颜色,但可能让你误以为颜色没生效——先关插件验证
改完颜色不生效?检查这三处
最常卡在这几步,不是配置写错了,而是被别的设置压住了。
- 确认没在
workbench.colorCustomizations里重复定义同一项(比如同时设了editor.foreground和textMateRules中的foreground) - 检查当前打开的文件是否识别对了语言模式:右下角显示的是
JavaScript还是Plain Text?如果是后者,string规则根本不会触发 - 某些主题(比如
Nord、One Dark Pro)自带 token 颜色强化逻辑,会覆盖你的textMateRules。临时换回默认主题Default Dark+测试,确认是主题冲突再针对性调整
真正麻烦的不是怎么写配置,而是 scope 的粒度太细、语言差异太大、主题又各搞一套。调一次颜色,往往要开三个文件:当前代码、scope 检查面板、settings.json,来回切着看才稳。











