Sublime的用户设置(User Settings)和默认设置是什么关系? (JSON配置详解)

11次阅读

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

Sublime的用户设置(User Settings)和默认设置是什么关系? (JSON配置详解)

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-settingsEmmet.sublime-settings)**独立于主设置系统**,它们也有自己的默认 + 用户两层,但路径和加载时机不同。

你可以在 Preferences → Package Settings → [插件名] → Settings 打开对应窗口。这些文件命名通常是 [插件名].sublime-settings,结构一样是 JSON 覆盖,但不会影响主编辑器行为。

真正容易混淆的是:某些插件(比如 EditorConfig)会监听主设置里的字段(如 tab_size),一旦你在用户设置里写了,插件可能就不再读项目级 .editorconfig —— 这种隐式耦合得看插件文档,不能默认“写了就一定优先”。

text=ZqhQzanResources