直接在settings.json配"files.associations",键须为".ext"或无点文件名,值填右下角确认的小写语言id(如"dotenv"),工作区配置优先级高于用户级,通配符仅支持不支持**或正则。

直接在 settings.json 里配 "files.associations",键写对扩展名(带点、支持通配符),值填对语言 ID(全小写、无空格),改完立刻生效,不用重启。
怎么写 files.associations 才匹配到文件
VSCode 只认两种格式的键名:"*.ext"(带星号和点)匹配所有 .ext 文件,"filename"(无点、无星号)匹配**无扩展名**的特定文件名。写错就完全不触发。
-
"*.log"✅ 匹配app.log、error.log -
"Dockerfile.prod"✅ 匹配这个确切名字(注意没点) -
"*.env.local"✅ 支持多级后缀 -
"env"❌ VSCode 不认识,不会匹配.env -
".env"❌ 点开头不是合法 glob 模式 -
"dotenv"❌ 不是语言 ID,是插件名,VSCode 会忽略
语言 ID 从哪来?别猜,直接看右下角
打开一个已正确高亮的同类文件(比如一个正常显示 XML 高亮的 config.xml),看窗口右下角显示的语言名——那就是你要填的值,全小写、无空格、无引号。
- 显示
XML→ 填"xml" - 显示
TypeScript React→ 填"typescriptreact" - 显示
Dockerfile→ 填"dockerfile" - 显示
Plain Text→ 填"plaintext"(不是"text"或"txt")
不确定时,点右下角语言名 → Configure File Association for '.xxx',它会自动帮你写进设置并注明作用域(用户/工作区)。
为什么改了还是不高亮?大概率是被覆盖或锁死了
最常见的不是配置错,而是优先级冲突:
- 工作区设置(
.vscode/settings.json)会盖掉用户设置 - 某些插件(如 Prettier、ESLint、Better TOML)会主动注册自己的关联规则,且优先级更高
- 文件已被手动切换过语言模式(右下角点过),这个“手动指定”会强于
files.associations
排查方法:打开目标文件 → 看右下角语言名是不是你设的;如果不是,点它 → Reopen with Language Mode → 选你想要的,再检查是否持久化。如果仍失效,临时禁用插件逐个试。
特殊场景:无后缀文件、二进制生成文件、带点的中间名
这些容易漏掉,但 files.associations 全能覆盖:
- 无扩展名文件(如
Makefile、Procfile)→ 键写成"Makefile"、"Procfile"(不带点) - TS 编译产物
index.tsbuildinfo→ 键写"*.tsbuildinfo",值填"jsonc"(支持注释) - 带中间点的配置
docker-compose.prod.yml→ 键写"docker-compose.*.yml",值填"yaml" - 日志类文件(
access_log、app.log.gz)→ 用"*.log"+"*.log.*"覆盖变体
注意:通配符只支持 *,不支持 ** 或正则;路径中含斜杠的写法(如 "src/**/*.log")无效。











