最稳解法是打开.log或.env文件后,点击右下角“Plain Text”→选合适语法(如INI)→再点右下角→“Open all with current extension as…”→确认同语法,Sublime将自动在Preferences.sublime-settings中写入"extensions": ["log", "env"]和完整syntax路径。

怎么让 .log 或 .env 文件一打开就高亮
Sublime Text 默认不识别这些后缀,打开就是 Plain Text——不是 bug,是它没内置映射。最稳的办法不是手改 JSON,而是用界面操作触发自动绑定:
- 先用 Sublime 打开一个
.log文件 - 点右下角显示的
Plain Text→ 选INI或Shell-Unix-Generic(看内容结构) - 再点右下角 →
Open all with current extension as…→ 选刚才同个语法
这会在 Packages/User/Preferences.sublime-settings 里自动生成类似这样的块:
"extensions": ["log", "env"], "syntax": "Packages/INI/INI.sublime-syntax"
注意:syntax 值必须是完整路径、大小写敏感;extensions 列表里不能带点,写 "log",不是 ".log"。
为什么改了 default_syntax 还是 Plain Text
default_syntax 只控制 Ctrl+N 新建的无路径空白文件,不是所有场景。它失效通常不是配置逻辑错,而是底层链断了:
-
default_syntaxes或default_syntac拼错:Sublime 静默跳过,不报错 - 路径指向的文件不存在:比如写了
Packages/TypeScript/TypeScript.tmLanguage,但插件名其实是Typescript(少了个cript)或根本没装 - 插件劫持:ApplySyntax、DefaultFileSyntax 会覆盖该设置;临时禁用它们可验证
- JSON 格式错误:多一个逗号、引号用成中文、括号不匹配——整个用户设置加载失败,回退到默认值
怎么查某个语法的真实路径
手敲 Packages/XXX/YYY.tmLanguage 极易出错,且 Sublime 不提示。正确查法是“以终为始”:
- 先打开一个已正确高亮的文件(如
test.js) - 右下角点语言名 →
Open all with current extension as… - 菜单里显示的全称就是真实路径,例如:
Packages/JavaScript/JavaScript.tmLanguage - 或者用
Ctrl+Shift+P→PackageResourceViewer: Open Resource,展开对应包找.sublime-syntax文件
别信网上搜到的路径,不同插件版本、安装方式可能导致路径差异。
自定义语法文件为什么没生效
手写 .sublime-syntax 容易静默失败,90% 是结构或格式问题:
- 必须用
Tools → Developer → New Syntax创建模板再改,不能从零手写 YAML - 文件必须存到
Packages/User/目录下,且名以.sublime-syntax结尾(mylang.syntax无效) -
contexts下必须有main:,且所有match规则顺序不能乱——字符串规则写在关键字前面,关键字就永远匹配不上 - 调试时按
Ctrl+Shift+P输入Show Scope Name,把光标停在目标词上,看弹出的作用域是不是你写的keyword.control.mylang
语法文件只负责打标签,颜色是否显示取决于当前 color_scheme 是否定义了对应作用域样式——这点最容易被忽略。











