Sublime Text 仅通过扩展名(或BOM/shebang)决定语法高亮,不分析文件内容;设默认语法(右下角→Set as Default)是最安全方式,会自动写入语法包配置;手动编辑需修改对应语法包的extensions数组,非全局设置;View→Syntax仅为临时切换,不持久;失效常见原因包括语法包未安装、扩展名大小写不符、BOM/shebang干扰或插件冲突。

Sublime Text 不会自动识别文件内容来决定语法高亮,它只认扩展名(或极少数 BOM/shebang 规则);新建 .ts 显示 Plain Text、打开 .log 没有颜色,都是正常现象,不是 bug。
点击右下角“Plain Text”设默认是最安全的操作
这是绝大多数用户应优先走的路径,出错率最低:
- 打开一个
.ts文件 → 右下角显示Plain Text→ 点击它 → 选Set as Default for .ts Files - Sublime 会自动在对应语法包(如
TypeScript.sublime-settings)里写入"extensions": ["ts"] - 此后所有
.ts文件都会默认用 TypeScript 语法高亮,无需再点 - 如果没看到
Set as Default选项,说明你还没手动切换过当前文件的语法;先点右下角选一次TypeScript,再点就能出现该菜单
手动编辑语法专属配置绑定多个扩展名
想让 .conf、.ini、.env 都用 INI 语法?得进语法包自己的配置文件,不能往全局 Preferences.sublime-settings 里硬塞:
- 先用上面方法为任意一个扩展名(比如
.env)设一次默认,Sublime 就会生成INI.sublime-settings - 然后菜单 →
Preferences → Settings – Syntax Specific,打开该文件 - 在里面加一行:
"extensions": ["conf", "ini", "env"](注意是数组,不是字符串) - 别写
default_extension_map或file_extensions—— 这些字段 Sublime 不识别,写了也无效
View → Syntax 是临时切换,重启后不保留
这个菜单项只影响当前文件窗口,适合快速试看效果,但不解决根本问题:
-
View → Syntax → JavaScript:仅当前文件立刻变色,关掉再开还是Plain Text -
View → Syntax → Open all with current extension as...:只在本次 Sublime 运行期间生效,重启就失效 - 它不会修改任何配置,也不写入
extensions字段,纯属会话级覆盖
为什么有些扩展名始终不生效?常见卡点
不是设置没保存,而是底层条件没满足:
- 语法包未安装:比如想绑
.vue却没装 Vue Syntax Highlighter,Set as Default根本不会出现 - 扩展名大小写不一致:Sublime 默认只匹配小写扩展名,
.TS和.Ts不会被"extensions": ["ts"]覆盖 - 文件已带 BOM 或 shebang:比如
#!/usr/bin/env node开头的.js文件,可能被强制识别为 ShellScript,覆盖扩展名规则 - 插件冲突:某些老旧插件(如旧版 ConvertToUTF8)会劫持语法加载流程,导致右下角菜单异常或设置不生效
真正容易被忽略的是:Sublime 的语法绑定完全依赖「扩展名到语法包」的静态映射,没有 fallback 机制。一旦扩展名没列在 extensions 数组里,它就永远当 Plain Text 处理——哪怕文件内容全是 valid JSON 或 TypeScript。


















