必须先手动切换一次语法才能触发“Open all with current extension as…”菜单:打开.log文件→右下角选Shell-Unix-Generic→再点右下角即可出现该选项,随后自动生成Packages/User/Shell-Unix-Generic.sublime-settings并写入"extensions": ["log"];直接改全局Preferences无效。

点右下角“Plain Text”后没出现“Set as Default for .xxx”菜单?
这个选项不会自动出现,必须先手动切换一次语法。打开一个 .log 文件,右下角显示的是 Plain Text,点击它 → 从列表里选 Shell-Unix-Generic(不是 ShellScript,后者不匹配日志内容),这时再点右下角,才会弹出 Open all with current extension as…。选中后,Sublime 就会把 "log": "Shell-Unix-Generic" 写入 Packages/User/Extensions.sublime-settings。
改了 Preferences.sublime-settings 里的 "extensions" 没用?
直接在全局用户设置里加 "extensions": ["log"] 是无效的。Sublime 只认语法专属配置文件里的映射,比如你要让 .log 绑定到 Shell-Unix-Generic 语法,就得确保该语法的用户配置存在且正确:
- 先触发生成:打开一个
.log文件 → 切换语法为Shell-Unix-Generic→ 点右下角 →Open all with current extension as… - 然后检查或编辑
Packages/User/Shell-Unix-Generic.sublime-settings(注意大小写和连字符) - 里面应有类似
"extensions": ["log", "out", "err"],不能写成shell-unix-generic.sublime-settings或ShellUnixGeneric.sublime-settings
.env、.conf 这类无标准语法的后缀怎么统一处理?
别依赖扩展名硬绑,用内容特征更可靠。例如所有 .env 文件都以 # 或空行开头,可新建 Packages/User/env.sublime-syntax:
%YAML 1.2
---
name: Env File
file_extensions: [env]
first_line_match: '^#|^\s*$'
scope: source.env
contexts:
main:
- include: scope:source.shell
保存后,只要文件第一行是 # 或为空,不管后缀是 .txt 还是没后缀,都会被识别为 Env File 语法。这种方式绕过了 extensions 列表的限制,也避免被 ApplySyntax 插件覆盖。
为什么双击 .pyw 打开了却还是 Plain Text?
这说明系统已成功调用 Sublime(不是记事本),但编辑器内部没完成语法映射。常见漏掉的步骤:
- 没真正打开过一个
.pyw文件——只是双击启动,Sublime 不会自动扫描未加载的后缀 - 右下角手动锁定了语法:点过一次
Plain Text并保存过,该视图就不再响应自动检测 - 插件干扰:ApplySyntax 默认禁用
extensions映射,需在它的Settings – User中显式启用"extensions_enabled": true - 路径大小写错误:
Packages/Python/Python.sublime-syntax写成python.sublime-syntax就不生效
最稳的做法永远是:打开一个真实 .pyw 文件 → 点右下角 → 选 Python → 再点右下角 → Open all with current extension as… → 关掉重开验证。


















