sublime text 原生不支持一键折叠头部文档注释,因其未被语法定义为可折叠单元;fold_comments: true 仅对明确定义了 comment.block 或 comment.doc scope 且配置 foldingstartmarker 的语言生效。

Sublime Text 原生不支持一键折叠头部文档注释(如 Python 的 """..."""、JS 的 /** ... */、HTML 的 <!-- ... -->),因为这些注释块未被语法定义为可折叠单元——即使高亮了,也不触发折叠逻辑。
为什么 fold_comments: true 对头部注释无效?
这个设置只对语言插件明确定义了 comment.block 或 comment.doc scope 且配置了 foldingStartMarker 的场景生效。Python 的三引号 docstring 虽有 comment.block.python,但原生语法包默认没启用折叠规则;JS 的 JSDoc 注释常被归为 comment.block.documentation.js,同样缺折叠边界定义;HTML 的 <!-- --> 更是完全不参与折叠计算。
- 你按
Ctrl+K, Ctrl+0或Ctrl+Shift+[,头部注释纹丝不动——不是快捷键坏了,是 Sublime 根本没把它当“结构”看 - 右下角显示
Python或JavaScript不代表所有注释都可折,只说明基础语法加载成功 - 装了 Babel、Vue Syntax Highlight 等插件也无用,它们只增强高亮,不补
foldingStartMarker
最稳:用正则选中 + fold_selection
不改配置、不碰语法文件、100% 可控,适合临时清理源码顶部的长文档注释。关键是让 Sublime 把它当“选区”,而不是等语法识别。
- 按
Ctrl+F打开搜索,启用Regex模式 - 输入匹配头部注释的正则(根据语言选其一):
• Python:^[s]*["]{3}[sS]*?["]{3}[s]*$
• JavaScript:^[s]*/**[sS]*?*/[s]*$
• HTML:^[s]*<!--[sS]*?-->[s]*$ - 勾选
Whole Word和Wrap Around,点Find All→ 全部注释行高亮 - 按
Ctrl+Shift+L将每个匹配转为独立光标,再用↑/↓微调,确保光标只落在注释行(避开空行或紧邻的def/function行) - 最后按
Ctrl+Shift+[—— 触发fold_selection,左侧 gutter 出现独立折叠箭头
⚠️ 注意:Ctrl+K, Ctrl+J(unfold_all)不会展开这种手动折叠块,必须点击箭头,或运行 unfold_selection 命令。
想永久支持?改 Packages/User/XXX.sublime-syntax
这是通用解法,但门槛高、易被覆盖。核心是告诉 Sublime:“从 docstring 开始,到结束引号为止,这段算一个可折叠单元”。
- 路径必须是
Packages/User/Python.sublime-syntax(Python)或Packages/User/JavaScript.sublime-syntax(JS),不能放错位置 - 在
contexts:下添加带fold: true的正则块,例如 Python 中追加:- match: '^(["]{3}|[''']{3})\s*$'\n fold: true\n push: [docstring_end]- docstring_end:\n - match: '^\1\s*$'\n pop: true - 改完需重启 Sublime;每次更新官方语法包都可能覆盖你的修改
- 漏掉
scope:上下文限定(如scope: comment.block.documentation.python)会导致高亮错乱或折叠失效
真正容易被忽略的是:一旦改语法,就得同步检查高亮、跳转、查找是否还正常——折叠不是孤立功能,它改的是 Sublime 对“代码结构”的整体理解边界。











