Sublime Text 的默认设置与用户设置是浅层覆盖关系,非合并;用户设置中同名键完全替换默认值,未出现的键回退到默认值。

Sublime Text 的默认设置和用户设置是覆盖关系
默认设置(Default Settings)是 Sublime Text 安装时内置的只读 JSON 配置,你无法直接修改它;用户设置(Preferences.sublime-settings)是你本地可编辑的覆盖层。Sublime 启动时会先加载默认设置,再用用户设置里的同名键(key)逐个覆盖——**不是合并对象,而是浅层覆盖**。
这意味着:
- 如果默认里
"font_size": 12,你在用户设置写"font_size": 14,最终生效的是14 - 如果默认里
"ignored_packages": ["Vintage"],你在用户设置只写"ignored_packages": ["Anaconda"],那Vintage就不再被忽略(因为整个数组被替换了) - 不存在“追加”或“深合并”,所有值都以用户设置为准,未出现的键才回退到默认值
如何安全地查看和编辑用户设置
别手动找文件路径,容易错位。正确做法是:菜单栏 → Preferences → Settings。这时左右分栏打开:左侧是只读的 Default Settings,右侧是可编辑的 User Settings。
关键提醒:
- 右侧编辑框必须保持合法 JSON:双引号、无尾逗号、字符串键名不能用单引号
- 不要复制整段默认配置到用户设置里——这会失去后续版本更新带来的默认优化
- 只写你需要改的项,其他全删掉。比如只想调字号和制表符,就只留这两行
{
"font_size": 13,
"tab_size": 2
}
常见配置项覆盖陷阱(特别是数组和布尔值)
很多问题源于对覆盖逻辑的误判。典型例子:
-
"ignored_packages"是数组,用户设置会完全替换默认值,不是去重合并。要保留默认忽略项,得手动抄一份再追加,例如:["Vintage", "SFTP"]
-
"draw_white_space"默认是"all",设成false才关闭;设成"selection"只显示选区空格,不是布尔开关 -
"word_separators"默认包含./\\()\"'-:,.;~!@#$%^&*|+=[]{}`~?,若想增加$,不能只写"$",而要重写整个字符串
插件设置是否也走同一套机制?
不完全是。插件自己的设置(如 Package Control.sublime-settings 或 Emmet.sublime-settings)**独立于主设置系统**,它们也有自己的默认 + 用户两层,但路径和加载时机不同。
你可以在 Preferences → Package Settings → [插件名] → Settings 打开对应窗口。这些文件命名通常是 [插件名].sublime-settings,结构一样是 JSON 覆盖,但不会影响主编辑器行为。
真正容易混淆的是:某些插件(比如 EditorConfig)会监听主设置里的字段(如 tab_size),一旦你在用户设置里写了,插件可能就不再读项目级 .editorconfig —— 这种隐式耦合得看插件文档,不能默认“写了就一定优先”。










