VSCode token 颜色未生效是因为 scope 匹配错误;必须用 Developer: Inspect Editor Tokens and Scopes 获取最优先的完整 scope(如 string.quoted.double.js),而非简写 strings,并注意语义高亮需启用 editor.semanticHighlighting 且依赖 LSP 正确解析。
改没生效?不是配置写错了,而是你没打中真正起作用的 scope —— VSCode 的高亮颜色由“主题内置 → 扩展 → 用户设置 → 内联装饰”逐层覆盖,且同 token 多 scope 匹配时,只取最具体的那个。
为什么 textMateRules 里配了 scope 还是没变色
常见错误是直接写
或
这类顶层字段,它们只是快捷入口,只影响极少数通用 scope(比如
),而且仅对当前启用的主题生效;而
是底层机制,必须手动指定完整 scope 才能跨语言、跨主题稳定生效。
不同语言扩展注册的 scope 名完全不同:一个 JS 字符串可能是
,TS 里可能是
,Vue SFC 的 script 块里又可能是
scope 区分大小写,且空格、点号、斜杠都算在内;写错一个字符就匹配失败
Prettier、Volar 等插件可能重写或注入新 scope,导致你之前有效的配置突然失效
如何精准拿到真正生效的 scope 名
别猜,也别查文档——VSCode 自带的调试工具才是唯一可靠方式:
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
打开任意代码文件(如
),把光标停在你想高亮的 token 上(比如一个函数名、字符串、注释)
按
(Windows/Linux)或
(macOS),输入并执行
看弹出面板里的
列表:从上到下优先级递减,选第一个(最靠前)的完整 scope,例如
或
把这个 scope 名原样复制进
的
字段里
自定义 function 名颜色却只高亮了 function 关键字
这是语义高亮(semantic highlighting)和语法高亮(syntax highlighting)的根本混淆。想高亮
这样的实际函数名,必须依赖语言服务器提供的语义信息,而不是 TextMate 的语法 scope。
确认右下角语言模式是
或
,不是
检查
是否启用(默认开启,但某些插件或旧配置可能关掉)
运行
,光标停在函数名上,看
是否为
;如果是
,说明 LSP 没解析成功(常见于语法错误、未保存、或文件未被正确识别)
类内部方法属于
,不是
;要统一高亮,得同时配
和
主题更新后高亮又变了,怎么保持稳定
主题作者每次更新都可能调整 scope 注册逻辑或覆盖规则,所以硬编码 scope 名无法一劳永逸。最务实的做法是:每次主题更新后,重新用
检查目标 token 的当前 scope,并同步更新
中的配置项。不要试图用宽泛 scope(如
)偷懒——它看似省事,实则最容易被新主题覆盖或忽略。
editor.tokenColorCustomizations"strings""keywords"stringtextMateRulesstring.quoted.double.jsstring.quoted.double.tsstring.quoted.double.vueindex.tsCtrl+Shift+PCmd+Shift+PDeveloper: Inspect Editor Tokens and ScopesScope namesentity.name.function.tscomment.line.double-slash.jstextMateRules"scope"myApiCallTypeScriptJavaScriptPlain Text"editor.semanticHighlighting": trueDeveloper: Inspect Editor Tokens and Scopessemantic token typefunctionkeywordmethodfunction"function""method"Developer: Inspect Editor Tokens and ScopestextMateRulesstring