sublime text 新建窗口默认继承设置是因为其将窗口视为ui层而非独立配置域,所有窗口共享session数据;唯一实现完全隔离的方式是使用--multiinstance参数启动独立进程。

Sublime Text 新建窗口默认继承设置的原因
Sublime Text 的 subl --new-window 命令(或菜单「File → New Window」)本质是启动新实例,但 macOS/Linux 下它会复用主进程的 session 数据;Windows 稍有不同,但同样默认共享 Preferences.sublime-settings 和插件状态。这不是 bug,而是 Sublime 的设计逻辑:它把“窗口”视为 UI 层,而非独立配置域。
真正能实现独立会话的唯一方式:用 --multiinstance
不加这个参数,所有窗口共享编辑器状态(包括已打开文件、折叠状态、光标位置、甚至某些插件缓存)。加了之后,每个窗口才真正互不干扰:
-
subl --multiinstance启动全新进程,完全不读取已有窗口的 session - 插件如
Package Control仍可用,但不会同步安装/启用状态(比如你在窗口 A 禁用了GitGutter,窗口 B 不受影响) - 注意:这会导致内存占用略高,尤其开多个大项目时
- macOS 上需在终端执行,或改写 Dock 启动项;Windows 可右键快捷方式 → “属性” → 在“目标”末尾追加
--multiinstance
为什么不能靠修改 Preferences.sublime-settings 解决?
因为问题不在用户设置层,而在 Sublime 的进程模型。你改 "remember_open_files": false 或 "hot_exit": false,只影响退出/重启行为,不影响新建窗口是否继承当前状态。这些配置对 --multiinstance 无效,也压根不控制窗口间隔离。
常见误操作:
- 以为关掉
"remember_open_files"就能隔离窗口 —— 实际只是不记上次打开的文件,窗口间 tab、折叠、书签仍同步 - 试图用
Project → Save Project As…搞“不同项目不同设置”——项目设置只管语法高亮、构建系统等,不控制窗口级状态 - 装插件如
Session Manager——它管理的是“保存/恢复会话”,不是阻止窗口间状态污染
macOS 下如何让 Dock 点击图标也走 --multiinstance?
默认点击 Dock 图标会聚焦已有窗口,而不是新开独立实例。要绕过这个限制,得用 AppleScript 封装命令:
osascript -e 'do shell script "subl --multiinstance &"'
然后把它保存为 .app(用 Automator),再替换 Dock 中的 Sublime 图标。否则每次都要开终端敲命令。
容易被忽略的一点:Sublime 的 --multiinstance 是进程级隔离,但如果你用的是 Sublime Merge,它和 Sublime Text 共享部分底层逻辑,但不共享 --multiinstance 行为——别指望用同一个参数控制两者。










