default_syntax仅对ctrl+n新建的空白文件生效,要求无路径、无内容、未保存;值须为完整大小写敏感路径如"packages/python/python.sublime-syntax",修改后需重启验证。

default_syntax 只对 Ctrl+N 新建的空白文件生效
Sublime Text 的新建文件(Ctrl+N)默认永远是 Plain Text,这不是 bug,是底层设计:它只在“无路径、无内容、未保存”这三者同时成立时,才读取 default_syntax。一旦你保存为 .py 或打开已有文件,就完全走扩展名匹配逻辑,default_syntax 彻底失效。
所以别指望它影响你双击侧边栏新建标签、拖入新文件,或从菜单选 New File——那些都不触发该配置。唯一可靠入口就是 Ctrl+N(Windows/Linux)或 Cmd+N(macOS)。
-
default_syntax值必须是完整路径,如"Packages/Python/Python.sublime-syntax",不能简写为Python或python - 路径大小写敏感,
Packages/Python/python.sublime-syntax会静默失败 - Sublime Text 4 推荐用
.sublime-syntax后缀;ST3 可用.tmLanguage,但已不被新插件支持 - 改完必须重启 Sublime Text,部分版本不重启不加载新语法绑定
怎么查到正确的语法路径?别猜,用命令面板确认
凭印象写 Packages/JavaScript/JavaScript.tmLanguage 是最常见错误来源。正确路径得靠 Sublime 自己告诉你:
- 先用
Ctrl+Shift+P调出命令面板,输入并选择Set Syntax: JavaScript(换成你要的目标语言) - 再立刻执行
Tools → Developer → Show Scope Name,状态栏会显示类似source.js - 这个
source.js就是作用域名,对应标准路径通常是Packages/JavaScript/JavaScript.sublime-syntax - 验证路径是否存在:菜单
Preferences → Browse Packages…进入目录,手动找对应文件夹下的.sublime-syntax文件
如果找不到,说明该语言语法包没安装,或名字不一致(比如 TypeScript 插件实际提供的是 TypeScript.sublime-syntax,不是 JavaScript)。
为什么改了 default_syntax 没反应?优先排查这四点
配置写对了,但右下角还是显示 Plain Text,大概率是以下某个环节断了:
-
default_syntax写在了左侧的Default/Preferences.sublime-settings里——这是只读文件,升级即重置;必须写在右侧Settings – User中 - JSON 格式非法:多了一个逗号、少了一个引号、用了中文引号,整个用户设置加载失败,Sublime 回退到默认行为
- 装了
ApplySyntax或DefaultFileSyntax类插件——它们会劫持新建逻辑,优先级高于default_syntax;临时禁用插件可快速验证 - 路径拼错或语法包缺失:比如写了
Packages/TypeScript/TypeScript.sublime-syntax,但你根本没装 TypeScript 插件
验证是否生效:新建文件后,右下角应直接显示语言名(如 JavaScript),而不是 Plain Text;按 Ctrl+Shift+P 输入 Set Syntax,当前高亮项应与你配置的一致。
想让 .ts/.vue 等后缀自动识别?配 extensions 字段
default_syntax 管不了已存在扩展名的文件。.ts 文件默认不被识别为 TypeScript,是因为 Sublime 不预设扩展名映射——你得手动告诉它:
- 打开一个
.ts文件 → 点右下角当前语法(比如Plain Text)→ 选TypeScript - 弹出提示 “Set as Default for .ts Files” → 点确认,Sublime 就会在用户设置里自动加一行:
"extensions": ["ts"] - 如果要同时支持
.tsx和.vue,手动编辑为:"extensions": ["ts", "tsx", "vue"]
注意:extensions 必须放在 Preferences → Settings – User 里,不能写在语法文件内部,也不能放错 JSON 层级;已有该字段就追加,别覆盖。
真正容易被忽略的是:这个映射只对「首次打开」或「新建后保存为该扩展名」的文件生效;如果你先新建空文件、再手动改名成 .ts,它仍会先按 default_syntax 高亮,直到你保存并重开——因为重命名不触发语法重载。











