atom折叠能力由当前language-mode决定,与文件后缀无关;需手动切换为typescript/babel/vue等支持折叠的语法包,并通过命令面板验证grammar名称是否含函数/类/region支持。

确认语言模式是否支持折叠,而不是只看文件后缀
Atom 的折叠能力完全由当前 language-mode 决定,和文件名后缀没有强绑定。比如一个 .js 文件,右下角若显示 Plain Text 或 JavaScript(旧版),editor:fold-all 很可能不生效;必须手动点击右下角切换为 TypeScript、Babel 或 Vue 等现代语法包。
验证方式:按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Grammar,看列出的 grammar 名称是否带函数/类/region 支持。常见有效组合:
-
.ts文件 → 用atom-typescript插件,比默认language-typescript折叠更稳定 -
.vue文件 → 必须启用language-vue,且版本 ≥1.27,否则<script></script>区域不识别{} -
.jsx或.tsx→language-babel或language-typescript都行,但需确保未 fallback 到language-javascript
别硬改 config.cson 加 region 支持
在 config.cson 里写 "source.js": ["#region", "#endregion"] 是无效操作。Atom 不会因此识别折叠边界,只是把含这些字符串的行当作文本标记,重启后也不保证行为一致。
真正起作用的是语法包内置的 foldingStartMarker 和 foldingStopMarker 正则规则。所以:
- 优先装
language-babel或atom-typescript,它们原生支持// #region和// #endregion - 避免全局设置
foldingStrategy: "indent"—— 它会无视所有注释标记,只按空格/TAB 层级折,容易把if块和注释混折 -
fold-functions这类插件只对函数级生效,不处理#region,不能替代语法层支持
一键折叠全部必须手动绑定快捷键
Atom 默认没给 editor:fold-all 和 editor:unfold-all 绑定快捷键。靠 Ctrl+Shift+[ 或 Ctrl+Alt+[ 是错的 —— 它们只作用于光标所在层级,且极易因光标位置失效。
最稳的方案是进 keymap.cson 手动加:
'atom-text-editor': 'ctrl-k ctrl-0': 'editor:fold-all' 'ctrl-k ctrl-j': 'editor:unfold-all'
注意:
- Windows/Linux 用
ctrl-k ctrl-0,macOS 用cmd-k cmd-0(不是cmd-option-[) - AZERTY 键盘用户建议先在命令面板搜
fold all验证是否能执行,再配键位 -
ctrl-k ctrl-1到ctrl-k ctrl-9可按缩进级别折叠,适合分层收拢,但依赖编辑器缩进设置
折叠状态不会自动保存,重启即丢
Atom 默认把折叠信息存在内存里,关掉窗口就清空。这不是 bug,是设计如此。想持久化,只有两个靠谱路径:
- 装
nuclide-file-tree(轻量,只存折叠状态) - 装
save-session(功能全,但会连同打开的标签页、光标位置一起存)
别信“改 setting 就能开启持久化”——编辑器设置里根本没有这个开关。另外,任何格式化操作(如 prettier-atom 或 atom-beautify)都会重置所有折叠,因为 Atom 的折叠和文本内容不绑定,只记 displayLayer.folds 的瞬时快照。











