执行 Reload Syntax Definitions 是唯一生效方式;修改 ignored_packages、添加 extensions 或编写 .sublime-settings 后,必须手动触发该命令才能重载语法定义并更新菜单与作用域识别。

执行 Reload Syntax Definitions 是唯一生效方式
改完 ignored_packages、加了新 extensions、或手动写了 .sublime-settings 文件后,Sublime 不会自动重载语法定义。不执行这步,所有修改都只是“写在硬盘上”,编辑器压根不认——右下角仍显示 Plain Text,Set Syntax 菜单里也看不到新加的选项。
必须按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Reload Syntax Definitions 并回车。这个命令会强制重新扫描 Packages/ 目录下的所有 .sublime-syntax 和 .tmLanguage 文件,重建内部语法索引。
- 重启 Sublime Text 不能替代这一步;很多用户重启后发现还是没变化,就是漏了它
- 如果执行后菜单仍不出现某语法,说明该语法包根本没被加载:检查
ignored_packages是否误禁、插件是否安装成功、路径是否存在 - 执行时状态栏会短暂显示 “Reloading syntax definitions…”,无弹窗提示,别以为没反应就重复按
验证语法是否真被加载:用 Show Scope Name 看作用域
光看右下角显示 XML 或 TypeScript 不够可靠——它可能只是你上次手动选的缓存值。真正确认语法已加载,得看 Sublime 内部的作用域(scope)是否匹配。
打开一个已正确高亮的文件(比如一个带 <root></root> 的 XML 文件),按 Ctrl+Shift+P → 输入并运行 Show Scope Name。状态栏会显示类似 text.xml 或 source.ts 的字符串。
-
text.xml表示 XML 语法已加载且正在使用;text.plain则说明仍是 Plain Text - 若显示
source.python但你期望的是source.python.django,说明你装的 Django 插件没启用,或被ignored_packages屏蔽了 - 作用域名是后续写自定义高亮、快捷键、或插件规则的唯一依据,不能靠肉眼猜
extensions 绑定只对已存在扩展名的文件生效
"extensions": ["env", "conf"] 这类配置,只影响你「打开」或「新建并保存为」.env/.conf 的文件,对 Ctrl+N 新建的 untitled 文件完全无效——那是 default_syntax 管的事。
- 绑定前务必先确保该扩展名对应语法已加载(用上面
Show Scope Name验证) - .env.local 这种带点的多级后缀,Sublime 默认不识别,必须写成
"extensions": ["env.local"](不加开头的点) - 大小写敏感:
.S和.s是两个不同扩展名,需分别绑定;只绑了s,.S文件仍为 Plain Text - 非标准后缀如
.sv(SystemVerilog)无法通过右键菜单绑定,只能靠手动加extensions
ignored_packages 拼错或格式错会导致整套语法消失
这是最常被忽略的致命点:ignored_packages 字段一旦出错,Sublime 会静默跳过整个语法加载流程,连 Python、JSON 这些内置语法都会从菜单里消失,但不会报错、不提醒、不崩溃。
- 字段名必须是
ignored_packages(不是ignore_packages或ignored_package) - 值必须是 JSON 数组:
["XML", "TypeScript"],不能是字符串"XML",也不能漏掉中括号 - 大小写严格匹配:内置语法名是
XML,不是xml;TypeScript不是typescript - 删掉错误项后,必须执行
Reload Syntax Definitions,否则修改不生效
复杂点在于:有些插件(如 ApplySyntax)会动态覆盖语法选择逻辑,此时即使 ignored_packages 正确,Show Scope Name 也可能显示异常作用域——得临时禁用插件再验证底层是否正常。


















