Theme插件导致高亮全灰或变白,主因是语义高亮缓存未刷新或主题未适配语义token;应先关闭editor.semanticHighlighting.enabled验证,再删除semantic-tokens缓存目录并彻底退出VSCode重启。

Theme插件导致高亮全灰或变白,先关 editor.semanticHighlighting
装了新主题(比如 One Dark Pro、GitHub Theme)后代码突然全灰、const 和 function 不上色,大概率不是主题本身有问题,而是语义高亮(Semantic Highlighting)缓存没刷新,或新主题没适配语义 token 类型。最直接的验证方式是临时关闭它:editor.semanticHighlighting.enabled 设为 false。这不是永久方案,但能立刻确认问题是否出在这儿。
操作路径:设置里搜 semanticHighlighting → 把勾去掉;或者在 settings.json 里加一行:
"editor.semanticHighlighting.enabled": false
注意:关掉后 TypeScript 的 type parameter、Python 的 decorator 等精细着色会退回到基础文本高亮——如果你依赖这些,就别长期关着。
切换主题后高亮“残留”,必须删 semantic-tokens 缓存目录
从 Dark+ 切到 Nord 主题,发现 string 还是蓝色而不是青色?这是 VSCode 1.80+ 的语义高亮缓存机制在起作用。它把旧主题下的 token 颜色映射存在磁盘里,不手动清,换再多次主题都可能卡住。
- 关掉所有 VSCode 窗口(不是只关标签页,要彻底退出进程)
- 删掉对应缓存目录:
$HOME/.vscode/Cache/semantic-tokens/(macOS/Linux)或%APPDATA%\Code\Cache\semantic-tokens\(Windows) - 重新打开 VSCode,再开文件,高亮会按新主题重新生成
别指望 Developer: Reload Window 或重启编辑器能解决——缓存就在磁盘上,不删它,token 颜色映射就不会重算。
主题插件和语言扩展冲突,重点盯 Volar/Vetur、Pylance/Python
某些主题插件(尤其是带自定义语法着色规则的)会覆盖语言扩展返回的 token scope,造成解析中断。典型表现是:Vue 文件里 <script setup> 块中 ref 不高亮,但 console.log 还有颜色;或者 Python 的 def 是白色,但字符串引号还有颜色。
- 用
Developer: Inspect Editor Tokens and Scopes查看光标下 token scope:如果显示的是source.python但实际没颜色,说明主题没定义该 scope 的颜色;如果 scope 明显错(比如function被标成string),就是语言服务被劫持了 - Vue 项目务必禁用 Vetur(如果已装 Volar);Python 项目禁用旧版 Python 扩展(只留 Pylance)
- 主题插件启用后,检查
Output面板里 “Extension Host” 日志,搜semantic或token,看有没有报错
workbench.colorCustomizations 改不了语义高亮颜色
你在 settings.json 里写了 workbench.colorCustomizations,想改 editor.foreground 或 editorBracketMatch.background,却发现 string、keyword 还是老样子——这是因为语义高亮的颜色优先级高于传统 token 规则,它走的是另一条链:language server → semantic token type → theme token color。
想真正干预,只有两个办法:
- 换一个支持细粒度语义 token 的主题(比如 Nord、One Dark Pro v4.0+),它们在
.tmTheme文件里明确定义了support.type.object.ts这类 scope - 或者退回用
editor.tokenColorCustomizations+textMateRules,配合Inspect Editor Tokens找对 scope,但只能覆盖非语义部分(比如注释、括号匹配)
别在 workbench.colorCustomizations 里折腾语义高亮——它根本不管那套。


















