语法高亮失效八成是语言模式识别错误;应先点击右下角plain text标识手动切换为正确语言,再检查files.associations配置、文件后缀、语义缓存及扩展冲突。

语法高亮失效,八成是文件根本没被识别成目标语言——VS Code 不看内容,只认 languageId;而 languageId 的来源,优先级最高的是 files.associations 配置,不是后缀名,也不是你心里想的那门语言。
右下角显示 Plain Text 怎么办
这是最直接的信号:编辑器压根没启动任何语法解析器。此时连 function、def、const 都不会打上 token,更别说着色。
- 点击右下角空白/Plain Text 标签,输入
vue、typescript或python回车,强制绑定 - 勾选 “Configure
vuelanguage based settings” 可把这次选择设为该后缀默认值(避免每次重开都掉回 Plain Text) - 若文件无后缀(如临时粘贴的代码),必须手动指定,否则永远是 Plain Text
files.associations 配错了会怎样
写错一条 files.associations 就能让整个项目高亮崩掉,而且不报错、不提示,只默默给你白板。
- 常见错误:
"*.ts": "javascript"—— TypeScript 特有语法(interface、as const)直接不识别 -
"*.vue": "html"——<script setup></script>和defineProps全变白,Volar 完全不加载 - 大小写敏感:
.JS在 Linux/macOS 下可能不匹配"*.js": "javascript",得加一条"*.JS": "javascript" - 通配符只支持
*和**,不支持正则;value 必须是合法languageId(查Developer: Show Running Extensions确认)
为什么改了 files.associations 还不生效
VS Code 对已打开文件的语言模式有强缓存,改完配置不等于立即生效。
- 关闭当前文件再重新打开,或执行
Developer: Reload Window(不是 Ctrl+R 刷新页面) - 检查是否多个扩展注册了同一
languageId,比如 Vetur 和 Volar 同时启用,VS Code 会随机挑一个,导致<script lang="ts"></script>段落不走 TS 解析 - 某些语言(如
astro、svelte)需要对应插件已安装并激活,否则即使关联了扩展名,VS Code 也找不到解析器 - 工作区级配置(
.vscode/settings.json)会覆盖全局设置,优先检查它是否写了冲突规则
用 Developer: Inspect Editor Tokens and Scopes 快速定位
这个命令能跳过所有猜测,直接看到 VS Code 底层怎么“理解”你写的代码。
- 执行命令后,鼠标悬停在
const上,如果显示keyword.control.js且有颜色定义 → 是主题问题;如果 scope 是string或空 → 语言服务解析失败 - 对比
Default Dark+主题是否正常:如果它能高亮,说明你当前主题缺失对应 token 规则,不是插件或配置问题 - 若 scope 显示
meta.embedded.block.python却在 Vue 文件里 —— 说明<script></script>段落被当作了纯 Python 块,大概率是 Volar Take Over Mode 没开或没重启窗口
真正难排查的从来不是“怎么修”,而是“为什么它看起来像修好了”——比如右下角显示 Vue,但 defineProps 不跳转、ref 不着色,其实是 Volar 静默降级到了基础 TextMate 解析,语义层根本没起来。这种假成功比全白更危险。











