Sublime Text 的 Java 语法默认无折叠支持,需手动在 Packages/User/Java.sublime-syntax 中添加 foldingStartMarker 正则规则,并确保光标位于匹配行首且作用域含 meta. 前缀才生效。

Java语法默认不支持代码折叠,得手动补全foldingStartMarker
Sublime Text 原生 Java 语法(Java.sublime-syntax)没有定义 foldingStartMarker 和 foldingStopMarker,所以 Ctrl+Shift+[ 对 class、method、if、for 等结构完全无效。这不是快捷键坏了,是语法文件压根没写折叠规则。
验证方法:打开命令面板(Ctrl+Shift+P),运行 View Package File → 输入 Java/Java.sublime-syntax → 搜索 folding,结果为空即确认缺失。
- 别去改用户设置里的
"fold_buttons"或"fold_by_level"—— 这些只控制 UI 或缩进折叠,对 Java 的大括号结构无效 - 必须编辑语法定义本身,且要保存到
Packages/User/下才能覆盖原生包 - 修改后需重启 Sublime 或重新加载语法(切到其他文件再切回)才生效
补foldingStartMarker要匹配{但避开import和单行;
Java 折叠起点不能简单写成 {,否则会误折 import static xxx; 后面的 {,或把 return a + b; 当成块起点。正确正则需满足三个条件:前面有换行、后面非分号、所在行不以 import 开头。
在 Packages/User/Java.sublime-syntax 的 repository 段落里添加:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
- match: '(?x)\n\s*(?:public|protected|private|static|final|abstract|synchronized|native|strictfp)?\s*(?:class|interface|enum|@interface|record)\b.*?\{'
fold: true
- match: '(?x)\n\s*(?:public|protected|private|static|final|synchronized|native|strictfp|default)?\s*(?:void|[a-zA-Z_][a-zA-Z0-9_]*)(?:\s+[a-zA-Z_][a-zA-Z0-9_]*)*\s+\w+\s*\([^)]*\)\s*\{'
fold: true
- match: '(?x)\n\s*(?:if|for|while|do|try|catch|finally|switch)\s*(?:\(|\{)'
fold: true
- 每条
match都加了(?x)启用注释模式,方便后续维护 - 第一行捕获类/接口/枚举定义;第二行捕获方法签名(含返回类型、修饰符、参数);第三行捕获常见控制流语句
- 所有匹配都强制要求前面是换行符
\n,避免跨行误匹配 - 别漏掉
fold: true,否则规则只是“识别”而不会触发折叠
Ctrl+Shift+[仍无效?检查光标是否停在匹配行首、且作用域为source.java
即使语法文件改对了,Ctrl+Shift+[ 也会静默失败,如果光标不在正则真正命中的那行开头——比如停在 public class Foo { 行的空格上、或 { 字符上,都不行。必须停在 public 或 if 所在的**第一个非空白字符位置**。
- 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name→ 回车,状态栏应显示类似source.java meta.class.java或source.java meta.method.java,若只有source.java,说明正则没命中或作用域未继承 - 确保右下角显示的是
Java,不是Plain Text或Java (JDT)(某些插件语法包不兼容折叠) - 如果用了 LSP 或 Java 插件,临时禁用它们,排除
fold_flags被插件设为1(仅缩进折叠)的干扰
想折任意代码段?用fold_selection最可靠,不依赖语法
当你要临时收起一段日志输出、测试数据、或尚未整理的 TODO 列表时,硬套语法规则反而费劲。直接选中目标行,用 fold_selection 是唯一 100% 可控的方式。
- Windows/Linux:鼠标拖选 →
Ctrl+Shift+Alt+[ - macOS:鼠标拖选 →
Cmd+Ctrl+Option+[ - 折叠后侧边栏出现独立三角图标,点击即可展开,不影响其他语法级折叠块
- 该折叠只存在于当前会话,关闭文件即丢,不写入磁盘,也不受语法文件改动影响
- 它绕过了所有 scope、fold_level、foldingStartMarker 校验,适合紧急场景或混合语法文件(如 .java 中嵌 JSON 片段)
Java 折叠规则的难点不在正则多复杂,而在每次修改后都要验证作用域是否真正生成了 meta. 前缀——这是折叠生效的唯一信号。别信“改完就有效”,一定要用 Show Scope Name 点击目标行确认。

















