最常见原因是语言ID错误或未安装对应扩展。需通过右下角状态栏确认实际语言ID,确保files.associations中填写VSCode内部注册的准确ID(如dotenv而非env),并安装支持该语言的扩展;工作区配置优先级高于用户级,通配符仅支持和.,不支持*或正则。

为什么改了 files.associations 还是没高亮?
最常见原因是 VSCode 没“认出”你写的语言 ID。比如你想让 .env.local 用 dotenv 高亮,但误填成 "dotenv"(正确)写成 "env" 或 "shellscript"(错误),它就只会当纯文本处理。
语言 ID 必须和 VSCode 内部注册的一致,不能靠猜。打开一个已知能高亮的文件(比如 .env),点右下角语言模式,看到显示的是什么,就填什么 —— 多数情况下就是 dotenv、typescript、shellscript 这类小写字母组合,不带空格、不加引号、不缩写。
- 已打开的文件不会自动刷新语言模式,必须重新打开或手动触发
Change Language Mode - 如果用了多根工作区,
settings.json必须放在对应工作区根目录下才生效;放错位置等于没写 - 扩展声明的关联(如 DotENV 插件)优先级低于用户配置,一旦你在
files.associations里写了同一条规则,插件的自动识别就失效了
files.associations 的通配符怎么写才管用?
VSCode 的 glob 规则很朴素:不支持 **,也不支持正则,只认 * 和 . 字面量。想覆盖 .env 和 .env.development,得拆成两条写:
"files.associations": {
"*.env": "dotenv",
".env.*": "dotenv"
}
*.env 匹配 foo.env、config.env;.env.* 匹配 .env.production、.env.test —— 注意开头没 *,因为 VSCode 不会把 *.env.* 当作合法 glob。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 单独写
".env"只匹配字面名为.env的文件,不匹配.env.local - 写
"*.config.js"能匹配vite.config.js,但无法区分它是 JS 还是 TS;若需按路径区分,得配合语言特定设置或插件 - 顺序无关紧要,VSCode 按最长匹配原则选规则,不是按书写顺序
如何确认当前文件实际用的是哪种语言模式?
别信文件后缀,也别信你装了什么插件 —— 唯一可靠的方式是看右下角状态栏。打开目标文件,点击右下角那个文字(通常是 Plain Text 或 Auto-detect),弹出菜单里显示的才是当前生效的语言 ID。
如果你点了之后发现列表里没有 dotenv,说明你没装支持该语言的扩展,或者扩展没激活(有些扩展要求先打开一个匹配文件才会加载)。这时即使 files.associations 写对了,也会 fallback 到 plaintext。
- 快捷键
Ctrl+K Ctrl+M(Windows/Linux)或Cmd+K Cmd+M(macOS)可快速呼出语言切换面板 - 执行
Change Language Mode命令后,如果选中某个语言并勾选 “Configure File Association for ‘xxx’”,VSCode 会自动帮你补全files.associations条目 - 某些语言 ID 是扩展提供的(如
prisma、astro),不是 VSCode 内置的,必须先装对应扩展才能出现在列表里
工作区 vs 用户级配置,该写在哪?
用户级配置(全局)写在用户 settings.json 里,影响所有项目;工作区配置写在项目根目录下的 .vscode/settings.json 里,只对当前项目生效。两者都支持 files.associations,但优先级不同:工作区 > 用户 > 默认。
推荐策略:通用规则(如 *.log → plaintext)放用户级;项目专用规则(如 *.dto → typescript、src/env/*.env → dotenv)放工作区。注意后者必须用相对路径写法,且仅限于工作区根目录下的文件。
- 工作区配置不会被 Git 忽略,适合团队统一规范,但要小心泄露敏感路径逻辑
- 用户级配置修改后立即全局生效,但容易和项目需求冲突(比如你全局设了
*.config→json,但某项目里webpack.config.js真的就是 JS) - 如果发现某条规则始终不生效,先检查是不是被更高优先级的配置覆盖了 —— 打开命令面板输入
Developer: Show Running Extensions,看看有没有扩展在 runtime 动态注册冲突规则


















