sublime text 不保存折叠状态、光标位置等工作区状态,因其依赖易失效的 session.sublime_session 临时缓存;需保持 hot_exit: true、正常退出并确保语法识别正确才能恢复。

Sublime Text 本身不保存编辑器窗口布局、折叠状态、光标位置等“工作区状态”——它只保存项目文件夹和已打开的文件列表(即 .sublime-project 中的 folders 和 files),其他状态依赖本地缓存,且极易被清除或失效。
为什么关闭后重新打开,文件还在但折叠/光标/分屏全丢了?
Sublime Text 的“工作区状态”(如代码折叠层级、光标位置、选区、面板展开状态、甚至侧边栏宽度)由内存中运行时维护,仅临时写入 Session.sublime_session 文件(位于数据目录的 Local 子目录下)。该文件:
- 不会随
.sublime-project一起手动保存或提交到版本控制 - 在异常退出、强制杀进程、或启用
hot_exit: false时不会写入 - 每次启动时若检测到项目已存在,会优先用项目文件初始化,再尝试加载 session —— 但若文件路径变动或编码不一致,session 中的 buffer 状态直接丢弃
- 多实例并行时,只有一个实例能成功读写
Session.sublime_session,其余静默失败
如何让 Sublime 记住折叠状态和光标位置?
必须确保以下三项同时满足,否则折叠/光标等状态大概率无法恢复:
- 保持
hot_exit: true(默认值,检查Preferences → Settings中未被覆盖即可) - 关闭 Sublime 时使用菜单
File → Exit或快捷键(Cmd+Q/Ctrl+Q),而非直接关窗口或 kill 进程 - 不要在设置中启用
remember_open_files: false或save_on_focus_lost: false(后者影响自动保存,间接导致 session 缓存不完整)
补充:折叠状态依赖 folding_enabled 为 true,且文件语法识别正确(例如 .js 文件不能被误判为 Plain Text,否则折叠规则不生效)。
如何手动备份和迁移工作区状态?
真正可迁移的“工作区状态”只有两部分:项目结构(.sublime-project)和 session 缓存(Session.sublime_session)。但后者是二进制+加密序列化格式,不可编辑、不跨平台、且绑定 Sublime 版本。实操建议:
- 把
.sublime-project文件纳入 Git:它只含folders、settings、build_systems等静态配置,安全可靠 - 不要试图复制
Session.sublime_session到另一台机器或另一用户目录——99% 情况下加载失败,Sublime 启动后会静默重建一个空 session - 如需重置状态(比如卡在错误折叠),可临时重命名
Session.sublime_session,重启后生成新文件;原文件保留作故障排查参考
注意:Session.sublime_session 里还存有未保存文件的内容(unsaved_changes 字段),所以它既是状态载体,也是临时“草稿箱”。别删它,除非你确认所有文件都已保存。
有没有靠谱的第三方方案替代原生 session?
目前没有成熟插件能完整接管并持久化所有工作区状态(尤其是折叠树、多光标历史、命令面板最近记录等)。较实用的折中方案:
-
ProjectSpecificSettings插件:按项目定制设置(如tab_size、detect_indentation),弥补.sublime-project不支持动态设置的缺陷 -
BufferScroll插件:仅恢复单个文件的滚动位置和光标,不处理折叠或分屏,但稳定、轻量、开源可审计 - 完全放弃“状态迁移”,改用
Workspace+tmux(Linux/macOS)或Windows Terminal + WSL配合脚本管理终端工作区,Sublime 只负责编辑
复杂点在于:Sublime 的 session 机制本质是“进程级快照”,不是“声明式状态描述”。任何想把它变成可移植、可调试、可协作的状态管理,都会撞上这个设计边界。











