atom默认不保存折叠状态,重启后全展开是正常设计;需借助nuclide插件、config.cson配置foldingstrategy为indent,或自定义脚本调用editor.getfolds()实现伪持久化。

Atom默认不保存折叠状态,重启后全展开是正常行为
Atom原生不记忆单个文件的折叠状态,关闭再打开文件时所有折叠都会重置。这不是 bug,是设计如此——折叠纯属编辑器会话级 UI 状态,不写入磁盘。想让它“记住”,必须依赖插件或项目级配置机制。
用 nuclide 或 atom-ide-ui 的折叠管理功能(推荐但需注意冲突)
nuclide 和 atom-ide-ui 都实现了折叠状态持久化,路径分别是 .nuclide/workspace-folds.json 或 Nuclide.project.toml。但要注意:atom-ide-ui 的 folding 子功能与 Atom 原生折叠冲突,启用后会导致光标卡死、快捷键失灵。
- 只启用其中一个:要么用 nuclide 的完整折叠管理,要么关掉
atom-ide-ui里的folding服务 - nuclide 的状态捕获是增量式的,仅在手动折叠/展开、文件关闭、退出前 30 秒触发保存
- 状态按文件路径存储,跨机器同步需手动复制
.nuclide/目录 - 若项目里有
Nuclide.project.toml,且含[foldStates]段,打开时会自动加载
不用插件?靠 config.cson + foldingStrategy: "indent" 强制“伪记忆”
这是轻量替代方案,不真存状态,但能每次打开都按缩进自动折叠——比如 Python 文件一打开就自动收起所有函数和类。缺点是它不认 //#region,也不保留你上次手动折的位置。
- 在
config.cson里加这段:
"editor":
"foldingStrategy": "indent"
"core":
"customFileTypes":
"source.py": ["py"]
foldingStrategy: "indent" 对缩进敏感,Python/JS/YAML 可用;但对 C/C++/Java 这类靠花括号的,效果差甚至误折自己存 fold 数据?别手撸,用 editor.getFolds() + 项目配置文件
如果项目有定制需求(比如团队约定某几个函数块默认折叠),可以写个极简脚本读取并应用折叠状态。核心 API 是 editor.getFolds(),返回数组,每项含 start 和 end 行号。
- 获取当前折叠:
const folds = editor.getFolds() - 序列化保存到
.atom-fold-state.json(建议放项目根目录) - 监听
atom.workspace.onDidAddTextEditor,读取该文件并调用editor.foldBufferRange([[start, 0], [end, 0]]) - 注意:行号可能因文件改动失效,不要用于长期存档,只适合临时会话延续










