代码颜色混乱主因是语义高亮缓存未刷新,需彻底退出vscode并删除semantic-tokens目录;空editor.tokencolorcustomizations会禁用语法着色;workbench.colorcustomizations无法修改语法颜色。

代码颜色混乱不是主题坏了,也不是插件冲突的锅,大概率是语义高亮缓存(semantic-tokens)没刷新——尤其在切换主题后,旧 token 颜色被复用,导致 const 还是蓝的、而新主题里它该是紫色。
为什么删 semantic-tokens 缓存比重启窗口更管用
VSCode 1.80+ 默认启用语义高亮,它把 function、parameter、type 这类 token 类型映射到具体颜色,并缓存在磁盘上。主题切换只改了颜色定义,但不自动清旧映射。重启窗口(Developer: Reload Window)只刷新内存缓存,semantic-tokens 目录里的文件还在,下次打开照样加载错的颜色。
- 关闭所有 VSCode 窗口(必须彻底退出,托盘进程也要杀掉)
- 删掉对应路径下的
semantic-tokens子目录:
— macOS/Linux:$HOME/.vscode/Cache/semantic-tokens/
— Windows:%APPDATA%\Code\Cache\semantic-tokens\ - 重新启动 VSCode,打开任意文件,语义高亮会重新生成 token → theme 映射
editor.tokenColorCustomizations 被设为空对象就全灰
有人为“统一风格”在 settings.json 里写了 "editor.tokenColorCustomizations": {} 或 "textMateRules": [],结果所有语法元素都退回到默认前景色——这不是主题失效,是你主动关掉了语法着色开关。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 打开设置(
Ctrl+,),搜tokenColorCustomizations,点「在 settings.json 中编辑」 - 删掉整段空配置;如果只想微调,保留结构,只改需要的
scope,例如:"scope": "keyword", "settings": {"foreground": "#ff6b6b"} - 别直接抄网上 scope 名字,先用
Developer: Inspect Editor Tokens and Scopes(Ctrl+Shift+P调出)停在目标词上确认真实 scope
终端乱码或颜色残留?先看 TERM 和 ANSI 序列
VSCode 集成终端显示异常(比如颜色卡死、字符错位),常和 TERM 环境变量或未闭合的 ANSI 转义序列有关,跟编辑器配色本身无关。
- 运行
echo $TERM,确保是xterm-256color或screen-256color;错的话临时执行export TERM=xterm-256color - 程序输出带颜色时,务必用
\033[0m重置样式,否则后续所有输出都被染色 - 清滚动历史:命令面板输入
Terminal: Clear Scrollback;要彻底清理渲染缓存,可删Cache目录下全部内容(非仅semantic-tokens)
workbench.colorCustomizations 改不了语法颜色
很多人试图用 workbench.colorCustomizations 覆盖 string 或 keyword 的颜色,发现完全无效——因为语义高亮走的是另一条链路:language server → semantic token type → theme token color,它的优先级高于传统 workbench 配色。
-
workbench.colorCustomizations只能改 UI 元素(如侧边栏背景、状态栏文字),不能动代码文本的语法色 - 想改语法色,必须通过
editor.tokenColorCustomizations或换支持该 scope 的主题 - 禁用语义高亮(
"editor.semanticHighlighting.enabled": false)虽能绕过缓存问题,但 TypeScript/Python 会丢失decorator、enum member等精细着色,慎用
真正卡住人的,往往不是哪一步没做,而是删了 semantic-tokens 却忘了关掉后台进程,或者改了 tokenColorCustomizations 却没验证 scope 是否匹配——缓存和 scope 这两层,一个藏得深,一个容易错,得一起盯住。










