default_syntax仅对未保存的untitled文件生效,新建文件默认为Plain Text,它不控制已保存或带扩展名的文件;修改后需重启Sublime Text,路径须完整、大小写敏感且斜杠方向正确。

default_syntax 只对未保存的 untitled 文件生效
新建文件(Ctrl+N)默认是 Plain Text,default_syntax 是唯一能改变这个行为的配置项,但它不控制任何已保存文件或带扩展名的文件。一旦你执行 Save As 并输入 .py,Sublime 就立刻切换到基于扩展名的语法匹配逻辑,default_syntax 完全失效。
常见误解是以为设了 default_syntax 就能让所有新文件“永久带语法”,其实它只管那个一闪而过的空白 tab 状态。验证是否生效:新建文件后右下角直接显示 “Python” 而非 “Plain Text”,且按 Ctrl+Shift+P 输入 Set Syntax 时当前高亮项与你配置的路径一致。
- 路径必须完整、大小写敏感,例如
"Packages/Python/Python.sublime-syntax"(ST4)或"Packages/JavaScript/JavaScript.tmLanguage"(ST3) - 拼错一个字母、多一个空格、用错斜杠方向,都会导致静默失败
- 修改后必须重启 Sublime Text,部分版本不重启不会加载新语法绑定
- 如果装了
ApplySyntax或AutoSetSyntax,它们可能劫持新建流程,临时禁用可排查干扰
给 .ts、.env 这类扩展名自动绑定语法的正确路径
想让 .ts 文件一打开就高亮为 TypeScript,不能改语法包里的 file_extensions 字段,也不能在全局 Preferences.sublime-settings 里硬塞 "extensions": ["ts"] —— Sublime 不认这种写法。
真正起作用的方式只有两种:
- 打开一个
.ts文件 → 点击右下角 “Plain Text” → 选 “TypeScript” → 弹出 “Set as Default for .ts Files” 后确认。Sublime 会自动往对应语法包的用户设置里写入"extensions": ["ts"] - 手动编辑
Packages/User/TypeScript.sublime-settings(注意名字必须和语法名完全一致),加入:{"extensions": ["ts", "tsx"]}
注意:View → Syntax → Open all with current extension as… 是最稳的批量操作入口,尤其适合 .env、.conf、.log 这类冷门后缀;但别在 Preferences.sublime-settings 里写 extensions,它会被忽略。
语法专属配置(如 tab_size)必须先确保语法识别成功
tab_size、translate_tabs_to_spaces 这类设置不是按文件后缀生效的,而是按当前激活的语法名绑定。也就是说,.js、.mjs、.cjs 都能共用 JavaScript.sublime-settings,前提是右下角显示的是 “JavaScript”,而不是 “Plain Text” 或 “ShellScript”。
常见失效场景:
- 文件开头有
#!/usr/bin/env node,Sublime 优先按 shebang 匹配为 ShellScript,覆盖你设的 JavaScript 绑定 - 右下角被手动点过一次语法(比如误点成 HTML),该视图会被“锁死”,后续 Settings – Syntax Specific 修改无效
- 你编辑的是
Packages/User/JavaScript.sublime-settings,但当前文件实际绑定的是Packages/TypeScript/TypeScript.sublime-syntax(即右下角显示 “TypeScript”) - 插件如
ApplySyntax在加载时重置语法,你的配置被绕过
改完语法专属配置后,已打开的文件不会自动重载缩进规则,需关闭再重开,或手动执行 Ctrl+Shift+P → Set Syntax: Detect Syntax。
别把 default_encoding_on_save 和新建文件编码混为一谈
很多人以为 default_encoding 控制新建文件的编码,其实它早已被弃用。真正决定落盘编码的是 default_encoding_on_save —— 它只在你按下 Ctrl+S 时起作用,且强制以指定编码写入磁盘。
新建空文件右下角显示 “UTF-8”,只是编辑器当前解码标识,不代表文件已含 UTF-8 字节(空文件没有内容,自然没有编码字节)。如果你需要带 BOM,必须显式写 "UTF-8 with BOM",其他写法如 "UTF8-BOM" 会静默失效。
-
new_file_content仅对 Ctrl+N 有效,内容中换行必须用\n,Windows 用户别用\r\n -
default_extension对新建文件完全无效,它只影响另存为对话框的默认后缀 - 要实现动态模板(如插入当前日期),
new_file_content不支持变量,得靠插件如FileTemplates
最易被忽略的一点:default_syntax 和 default_encoding_on_save 是两个独立开关,前者管高亮,后者管落盘;两者都设了,才算是真正完成“新建即可用”的闭环。路径写错、重启遗漏、插件干扰——三者任一出问题,整个流程就断在第一步。


















