修改 editor.tokenColorCustomizations 没生效是因为 VSCode 按主题内置→扩展→用户 settings→内联装饰的优先级渲染,且同 token 多 scope 匹配时取最具体 scope;需用 Developer: Inspect Editor Tokens and Scopes 精准获取高优先级 scope,并在 textMateRules 中按完整 scope 名配置,避免依赖宽泛 scope 或顶层快捷字段。
为什么修改
没生效?
VSCode 的语法高亮颜色不是简单“覆盖”就完事的,它有一套明确的优先级规则:主题内置颜色 → 扩展注入的颜色 → 用户在
中通过
设置的颜色 → 内联装饰(如调试断点、TODO 注释等)。但关键在于:
如果某个 token 被多个语法作用域(scope)同时匹配,VSCode 会取“最具体”的那个 scope 的颜色,而不是最先定义的
。你改了
,但实际生效的可能是
这类更细粒度的 scope。
如何精准定位并覆盖目标 token 的颜色?
靠猜 scope 名字基本无效。必须用 VSCode 自带的开发者工具实测:
打开任意代码文件(如
),把光标放在想调试的 token 上(比如一个字符串)
按
(Windows/Linux)或
(macOS),输入并执行
看弹出的面板里
列表——从上到下越靠前的 scope 优先级越高,通常选第一个(最具体的)来覆盖
在
中写入时,用这个完整 scope 名作为 key,例如:
和顶层
/
字段的区别
很多人只改
,结果发现 .ts 或 .jsx 里还是没变——因为这些字段是“快捷入口”,只影响极少数通用 scope(如
、
),且仅对当前启用的主题生效;而
是底层机制,支持任意 scope,跨语言通用,优先级也更高。
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
顶层字段(如
)适合快速微调基础类型,但控制力弱、语言覆盖不全
必须手动配 scope,但能精确到
这种级别
两者可共存,但
中同 scope 的规则会覆盖顶层字段设置
注意:scope 名区分大小写,且不同语言扩展可能注册不同 scope(比如 Prettier 插件有时会重写 scope)
主题更新后高亮又变了,怎么保持稳定?
主题作者更新时可能调整 scope 映射或默认颜色,导致你之前写的
失效或错位。这不是 bug,是 TextMate 语法设计的固有特性。
不要依赖“看起来像”的 scope 名,每次主题更新后,重新用
验证
避免写过于宽泛的 scope(如只写
),它容易被子 scope 覆盖,也不如具体 scope 稳定
如果多个语言都需要统一某类 token 颜色(如所有字符串都用橙色),可以列多个 rule,分别对应
、
等
某些插件(如
)会动态注入 decoration,这类颜色不受
控制,得去对应插件配置
真正难的不是写几行 JSON,而是理解 scope 的层级关系和主题的渲染链路。一旦漏掉一个关键 scope,或者误判了优先级顺序,颜色就会“莫名其妙”地回退到主题默认值。
editor.tokenColorCustomizationssettings.jsoneditor.tokenColorCustomizationsstringstring.quoted.double.js.jsCtrl+Shift+PCmd+Shift+PDeveloper: Inspect Editor Tokens and ScopesScope namessettings.json"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "string.quoted.double.js",
"settings": { "foreground": "#FF6B6B" }
}
]
}textMateRulescommentsstringsstringsstringcommenttextMateRulesstringstextMateRuleskeyword.control.flow.tstextMateRulestextMateRulesInspect Editor Tokens and Scopesstringstring.quoted.single.pystring.quoted.double.rsBracket Pair ColorizertokenColorCustomizations