sublime text 默认不支持 sql 文件自动折叠,需手动启用 indentation_based_folding 或安装官方 sql 语法包并确保作用域为 source.sql;缩进需统一(空格或 tab),推荐先用 sqlbeautifier 格式化再折叠。

Sublime 本身不支持对纯 SQL 文件按缩进或语句块自动折叠,必须手动启用 indentation_based_folding 或依赖语法定义中的 fold 规则;默认打开 .sql 文件时,连 SELECT 块都折不了。
SQL 文件默认无法折叠,因为没加载正确语法作用域
右下角显示 Plain Text 或 MySQL(注意不是 SQL)时,Ctrl+Shift+[ 必定无效。SQL 折叠依赖语法包里是否定义了 foldscope,而官方 SQL 语法包(非 MySQL、PL/SQL)只对 BEGIN ... END、存储过程体等有限结构识别折叠,普通 SELECT / INSERT 语句块不在其中。
- 确认语法:右下角点击 → 选
SQL > SQL(路径要完整,不能只选MySQL) - 若列表无
SQL,用Package Control安装官方SQL包(不是SQLTools或SQL Snippets) - 验证作用域:光标停在
SELECT行,按Ctrl+Shift+P→ 输入show_scope_name,状态栏应出现类似source.sql,否则语法未生效
想折长 SQL 语句,只能靠缩进层级折叠
SQL 没有函数/类这类天然作用域,唯一可靠的方式是把连续相同缩进的多行视为一个可折叠单元。这需要显式开启 indentation_based_folding,且它不随语法自动启用。
- 打开
Preferences → Settings – Syntax Specific(确保当前文件类型是SQL) - 添加配置:
"indentation_based_folding": true - 保存后,光标放在任意缩进行(如
WHERE子句起始行),按Ctrl+Shift+[即可折叠该缩进层级下的所有子行 - 注意:混用
Tab和空格会导致折叠中断;建议统一设为 2 或 4 空格(Preferences → Settings中配"tab_size": 2)
Ctrl+K, Ctrl+0 对 SQL 文件基本无效
这个快捷键依赖语法定义中顶层作用域(如 class、def)的存在,而标准 SQL 文件没有。即使你启用了 indentation_based_folding,Ctrl+K, Ctrl+0 也不会触发缩进折叠 —— 它只认语法 scope,不认缩进逻辑。
- 别指望一键收起整个 SQL 文件;必须逐段选中或逐层按
Ctrl+Shift+[ - 临时补救法:用正则查找
^SELECT|^INSERT|^UPDATE|^DELETE(勾选Regex和Match case),全选匹配行后按Ctrl+Shift+[手动折叠 - 如果 SQL 里嵌了大量注释或空行,折叠会断开;建议删掉冗余空行或把注释移到语句末尾
格式化后再折叠,效果更可控
未经格式化的 SQL(比如所有内容挤在一行或缩进混乱)会让 indentation_based_folding 失效。先用 SQLBeautifier 统一缩进,再折叠,成功率高得多。
- 安装
SQLBeautifier插件(通过Package Control) - 选中 SQL 片段,按
Ctrl+Shift+P→ 输入SQLBeautifier→ 选Beautify SQL - 设置插件偏好:进入
Preferences → Package Settings → SQLBeautifier → Settings,确保"indent_with_tabs"与你全局缩进设置一致(如设为false表示用空格) - 格式化后,同一逻辑块(如
JOIN条件、WHERE子句)通常缩进对齐,此时Ctrl+Shift+[能稳定折叠
真正卡住的点往往不是“怎么折”,而是“为什么折不动”——绝大多数情况是语法没切对、缩进不统一、或误以为 SQL 和 Python 一样有原生函数级折叠能力。动手前先看右下角,再查 show_scope_name,比反复试快捷键更省时间。











