default_syntax仅对Ctrl+N新建的untitled文件生效,需设完整路径如"Packages/Python/Python.sublime-syntax",大小写敏感且必须重启;.log等扩展名文件需通过extensions映射绑定语法。

Sublime Text 的语法设置不是“设一次就全局生效”,而是分场景、分文件状态、分配置位置的三重控制——搞错作用域,改了也白改。
default_syntax 只对 Ctrl+N 新建的 untitled 文件生效
它不改已保存文件、不改打开的 .py/.ts 文件、也不影响双击系统里某个 .log 的行为。你改完 default_syntax 后去打开一个已存在的 config.yaml,发现还是 Plain Text,这不是配置失败,是压根没走这条路。
- 验证是否生效:新建窗口 → 按
Ctrl+N→ 看右下角语言名是否变成你设的(比如Python),不是Plain Text - 值必须是完整路径,如
"Packages/Python/Python.sublime-syntax",不能写Python或Packages/Python/Python.tmLanguage(ST4 已弃用) - 大小写敏感,
Packages/Markdown/Markdown.sublime-syntax和packages/markdown/markdown.sublime-syntax是两个东西 - 改完必须重启 Sublime Text,部分版本不重启不会加载新语法绑定
让 .log/.env/.conf 一打开就高亮,得配 extensions
default_syntax 对这些带扩展名的文件完全无效。Sublime 默认没把 .log 映射到任何语法,所以它只能显示为 Plain Text。解决方式是告诉编辑器:“所有 .log 文件,默认用 Shell-Unix-Generic 语法”。
- 先打开一个
.log文件 → 点右下角Plain Text→ 选Shell-Unix-Generic - 再点右下角 →
Open all with current extension as…→ 确认选同个语法 - Sublime 会自动往
Packages/User/Preferences.sublime-settings里加类似这样的块:"extensions": ["log", "env"], "syntax": "Packages/ShellScript/Shell-Unix-Generic.sublime-syntax"
-
extensions列表里写"log",不是".log";syntax路径必须完整、大小写一致、不能有空格或中文
怎么拿到某个语法的真实路径?别猜,用 Show Scope Name
手敲 Packages/TypeScript/TypeScript.tmLanguage 很容易错——ST4 里这路径根本不存在,也不会报错,只是静默失效。最稳的方式是让 Sublime 自己“说”出路径。
- 打开一个已正确高亮的
.py文件(比如你自己写的脚本) - 按
Ctrl+Shift+P→ 输入并执行Show Scope Name - 状态栏显示类似
source.python的作用域名 - 把点换成斜杠,补上前缀:
Packages/Python/Python.sublime-syntax - 常见对应:
source.js→Packages/JavaScript/JavaScript.sublime-syntax,source.md→Packages/Markdown/Markdown.sublime-syntax
临时切换语法 vs 永久绑定,别混用
点右下角语言名、或用命令面板执行 Set Syntax,都只是当前 tab 有效。关掉再打开,或者新开一个同名文件,还是会走扩展名匹配逻辑。
- 适合场景:编辑无后缀文件(如临时
.env)、内容明显是某语言但扩展名不对(如用.txt存 JSON) - 如果你发现刚设成
JSON,一保存又变回Plain Text,大概率是开启了"detect_syntax": true,或装了ApplySyntax这类插件 - 永久生效必须靠
extensions映射,或在Packages/User/<syntax>.sublime-settings</syntax>里配语法专属设置
最容易被忽略的是:路径大小写、.sublime-syntax 后缀、以及「untitled 文件」这个限定条件——它们任何一个出错,default_syntax 就等于没写。


















