推荐首选操作是点击右下角语法名→“Set as Default for .ext Files”:打开对应文件后点击当前显示的语法名,选择绑定后缀,Sublime自动写入用户配置,仅影响该语法包且重启生效;若不弹窗则换语法名重试。

点击右下角语法名 → “Set as Default for .ext Files” 最快最稳
这是绝大多数场景下推荐的第一操作:打开一个 .sh、.tsx 或 .wxml 文件,右下角显示 Plain Text(或错误语法),直接点击它 → 选 Set as Default for .sh Files。Sublime 会自动把 "extensions": ["sh"] 写进对应语法(比如 Packages/ShellScript/Bash.sublime-syntax)的用户配置中,无需手动找路径、不用改 JSON。
这个操作只影响当前选中的语法包,不会污染全局 Preferences.sublime-settings;后续所有同后缀文件都会默认加载该语法,且重启后依然生效。
- 如果弹窗没出现,说明你当前点击的语法名不是可绑定项(比如点了
Shell-Unix-Generic而非Bash),换一个再试 - 对
.env、.conf这类无标准语法包的后缀,此操作可能不出现,需走手动配置 - 不要在未打开对应文件时提前设置——Sublime 不允许为不存在的语法绑定扩展名
手动编辑 Preferences.sublime-settings 绑定多个扩展名
当你要批量绑定(比如让 .ts、.tsx、.d.ts 全部走 TypeScript 语法),或者右下角菜单里找不到目标语法时,就得直接改配置文件。
路径是:Packages/User/Preferences.sublime-settings(不是 Default 下那个)。用 Sublime 自己打开它,确保 JSON 合法,然后加或改 extensions 字段:
{
"extensions": ["ts", "tsx", "d.ts"]
}
注意:extensions 是数组,值是纯字符串,不带点;整个配置必须是合法 JSON(末尾不能有多余逗号);改完保存即生效,不用重启。
- 如果已有
extensions字段,直接往数组里追加,别覆盖原有内容 - 路径写错、JSON 格式非法会导致新文件回退到
Plain Text,但不会崩溃 - 别去改语法文件里的
file_extensions—— Sublime 完全不读它
用 Open all with current extension as… 强制重绑已错配的后缀
有些插件(比如 Log Highlighter)会自带 log.sublime-syntax,把所有 .log 文件劫持成日志格式。你想让它变回纯文本?不能删插件,得覆盖它的优先级。
打开一个 .log 文件 → 点击右下角当前语法名(比如 Log Highlighter)→ 选 Open all with current extension as… → 在列表里选 Plain Text(路径通常是 Packages/Text/Plain text.tmLanguage)。
- 这会覆盖插件的绑定,且对所有新打开的
.log生效 - 如果列表里没有
Plain Text,说明插件禁用了它;此时要手动进Preferences → Settings – Syntax Specific,加一行:"syntax": "Packages/Text/Plain text.tmLanguage" - 已打开的文件不会自动刷新语法,关掉再重开即可
靠 first_line_match 实现内容驱动的语法识别
扩展名不可控时(比如内部 DSL、无后缀脚本、或统一用 .txt 存多种模板),光靠后缀绑定就失效了。这时得用语法定义里的 first_line_match 规则。
新建 Packages/User/api.sublime-syntax,写入:
%YAML 1.2 --- name: API Spec file_extensions: [] first_line_match: '^#\s*API\b' scope: source.api ...
保存后,所有以 # API 开头的文件,无论后缀是 .txt 还是无后缀,都会被识别为 API Spec 语法。
- 这种识别优先级高于扩展名绑定,适合强约定场景
- 必须重启 Sublime 才能加载新语法定义
- 别指望它识别多行特征——
first_line_match只看第一行,且正则性能敏感,避免复杂回溯
真正容易被忽略的是:Sublime 的语法绑定逻辑是“单向覆盖”,不是“多条件叠加”。你设了 extensions: ["sh"],又装了 ApplySyntax 插件,后者会完全接管检测流程,你的配置就失效了。遇到绑定不生效,先检查 Tools → ApplySyntax 是否存在,再查插件是否自带同名语法文件。


















