sublime text 默认仅按扩展名匹配语法,不分析文件内容;要让特定扩展名使用指定语法,需通过右下角菜单设为默认或手动编辑语法专属配置文件添加扩展名列表。

点击右下角“Plain Text”就能永久绑定扩展名
Sublime Text 不会自动猜文件类型,所谓“自动识别”其实是你手动建立的扩展名与语法的映射关系。打开一个 .conf、.env 或 .ts 文件显示为 Plain Text,不是 bug,是设计如此——它只认扩展名,不分析内容。
最直接、最不容易出错的做法是:打开该文件 → 点击右下角当前显示的语法名(比如 Plain Text)→ 选 Set as Default for .xxx Files(如 .env)。Sublime 会自动把 "extensions": ["env"] 写进对应语法(如 INI 或 ShellScript)的用户配置里。
- 没看到
Set as Default?说明你还没在该文件上手动切换过语法;先点右下角选一次目标语法(比如INI),菜单才会出现 - 这个操作写入的是语法专属的
.sublime-settings文件(如INI.sublime-settings),不是全局Preferences.sublime-settings - 改完立刻生效,无需重启 Sublime
手动编辑语法专属配置批量加扩展名
想让 .conf、.cfg、.ini 全部用 INI 语法?单靠点右下角太慢。得进对应语法的用户配置文件里追加扩展名列表。
操作路径:打开一个已设为 INI 的 .conf 文件 → Preferences → Settings – Syntax Specific → 在右侧 JSON 块中加:
{
"extensions": ["conf", "cfg", "ini", "env"]
}
- 注意:不要往全局
Preferences.sublime-settings里硬塞"extensions"字段——Sublime 会忽略它 - 大小写敏感:
.ENV和.env在 Windows 下被视为不同后缀,需分别列出 - 如果已有
"extensions"字段,直接追加,末尾别留多余逗号,否则整个配置失效
ApplySyntax 插件怎么配才真正生效
原生 Sublime 不支持按内容识别(比如靠 export 判断 .env 是 Shell 还是 Properties),必须靠 ApplySyntax。但它默认规则极保守,装完不配等于没装。
安装后,打开 Preferences → Package Settings → ApplySyntax → Settings – User,填入合法 JSON 数组(不是对象!):
{
"rules": [
{
"file_name": "\.(env|ENV)$",
"first_line_match": "^export ",
"syntax": "ShellScript/Shell-Unix-Generic"
}
]
}
- 正则写法要小心:
.(env|ENV)$中的点必须转义,[.]env也行;但.env(不转义)会被 Sublime regex 引擎忽略 - 规则顺序决定匹配优先级:从上到下,第一条命中就停;写宽泛的
"first_line_match": "^//"可能误判所有注释文件 - 改完设置必须重启 Sublime 才生效——这点常被忽略,改完以为立刻起效,结果还在跑旧规则
为什么改了配置还是 Plain Text?常见干扰源
配置写了、重启了、规则也对,但文件打开还是 Plain Text,大概率是被锁定或覆盖了:
- 手动选过一次语法(比如点过
Python)后,Sublime 会在当前视图记死这个选择,后续不管配置怎么改,它都坚持用那个手动指定的语法 -
ApplySyntax已启用时,它会接管语法检测逻辑,完全忽略你手动设的extensions映射 - 多个插件冲突(如
AutoSetSyntax或老旧的TSFormatter)可能静默劫持语法识别流程 - 新建未保存的
untitled文件永远走default_syntax配置,和内容、扩展名、ApplySyntax 规则都无关
真要排查,建议先禁用所有插件,只留 ApplySyntax(如果用了),再逐个开,看谁在抢控制权。











