必须用subl --new-window启动新进程并配合.sublime-project和.sublime-build文件实现隔离:每个窗口需绑定专属项目与构建系统,否则共享配置、插件状态及缓冲区。

Sublime Text 本身不支持“多开隔离环境”这种概念——它没有沙箱、没有进程级配置隔离,所谓“外置多开”本质是靠多个独立进程 + 手动配置文件绑定实现的。直接结论:必须用 subl --new-window 启动新实例,再配合项目级 .sublime-project 和构建系统 .sublime-build 文件,才能让每个窗口拥有独立 Python 环境、构建逻辑、缩进规则和插件行为。
为什么不能靠菜单或快捷键新开“干净窗口”?
Sublime Text 的 File → New Window 或 Ctrl+Shift+N 只新建标签页容器,不启动新进程,所有设置(包括用户配置、已加载插件、当前项目上下文)全部共享。真正隔离的“窗口”,必须是操作系统层面的独立进程。
-
subl --new-window(macOS/Linux)或subl --new-window(Windows)才是唯一可靠方式 - 双击桌面图标、右键菜单打开、拖拽文件进窗口,全受
"open_files_in_new_window": true控制,但依然复用同一进程,不是真隔离 - 即使开了多个窗口,只要没显式加载
.sublime-project,它们就共用Preferences.sublime-settings和全局插件状态
如何让每个窗口绑定不同 Python 虚拟环境?
单靠 subl --new-window 不够,必须为每个窗口指定专属项目,并在项目中硬编码构建路径。Sublime 不会自动继承 shell 的 venv 激活状态,PATH 也不带入 GUI 进程。
- 每个项目根目录下执行
Project → Save Project As…,生成.sublime-project - 在
.sublime-project的"settings"里写死"python_interpreter"(部分插件如 Anaconda 支持,但原生构建系统不认) - 真正生效的是自定义
.sublime-build:在项目内新建Python-Venv.sublime-build,内容中"cmd"必须指向虚拟环境里的python.exe(Windows)或python(macOS/Linux),且"path"要包含该环境的Scripts或bin目录 - 构建系统必须通过
Tools → Build System → Python-Venv手动切换,不会随项目自动激活
哪些配置能真正“随窗口走”?哪些会跨窗口污染?
项目级配置只对“当前窗口中打开的该 .sublime-project 下的文件”生效;但插件状态、命令面板历史、未保存的 buffer 是全局的。
- ✅ 生效项:
"tab_size"、"translate_tabs_to_spaces"、"file_exclude_patterns"、"build_systems"、"folders" - ❌ 不生效项:
"ignored_packages"(影响所有窗口)、"color_scheme"(若未写进项目 settings,仍用全局)、插件的运行时状态(比如 Emmet 是否启用、View In Browser 的浏览器路径) - ⚠️ 半生效项:
"env"字段只作用于构建命令的子进程,不影响 Sublime 主进程或插件内部调用
容易被忽略的三个硬性限制
这不是配置疏漏,而是 Sublime 的底层机制决定的:
- 同一个插件(如
Package Control)在所有窗口共享一个 Python 解释器实例,改某个窗口的插件设置,其他窗口立刻同步 -
.sublime-workspace文件记录的是窗口布局和打开文件列表,但它不保存构建系统选择或语法高亮模式——关掉再重开,这些得重新选 - 如果两个窗口都打开了同一路径的文件(哪怕物理位置不同),Sublime 会强制合并成一个 buffer,修改任一窗口等于改另一窗口——这是设计,不是 bug











