真正稳定可用的只有sqltools(推荐)和sqlbeautifier(轻量备选);前者支持方言识别与外部formatter,后者纯本地python实现但对反引号字段名易出错。

装哪个插件才真能用?别试 SQLFormatter 和 SQL Beautify
Sublime Text 原生不支持 SQL 格式化,Ctrl+Shift+P 搜 “Format SQL” 什么都不会出来——这不是你漏步骤,是它真没这功能。装错插件才是最常卡住的地方:名字带 SQLFormatter、SQL Beautify 的插件基本多年未更新,Sublime 4 下快捷键失效、缩进崩、中文注释被吞是常态。
真正稳定可用的只有两个路径:
-
SQLTools(推荐):支持方言识别、可绑定外部 formatter(如pg_format或sqlparse),对 WITH、窗口函数、嵌套子查询兼容性最好 -
SQLBeautifier(轻量备选):纯本地 Python 实现,不用装额外工具,但对超长动态 SQL 或反引号字段名(`user_id`)易出错
别装 SqlBeautify(少了个 r)、sqlbeautify(全小写)——Package Control 里搜出来的包名必须是 SQLBeautifier 或 SQLTools,拼错一个字母就加载失败。
sqlparse 怎么装才不被 Sublime 找不见?
sqlparse 是 Python 库,不是 Sublime 插件。很多人在虚拟环境里 pip install sqlparse,结果 Sublime 启动时调用的是系统 Python,根本找不到模块,静默失败,格式化后没反应也不报错。
实操建议:
- 先确认全局 Python 路径:
which python(macOS/Linux)或where python(Windows),然后在这个 Python 下运行pip install sqlparse - Windows 用户特别注意:
pip install后若路径含空格或中文(比如C:\Program Files\Python\),CodeFormatter 或 SQLTools 调用时会卡住——建议装到C:\tools\python\这类干净路径 - 查版本防风格突变:
python -c "import sqlparse; print(sqlparse.__version__)"。0.4.4+ 默认关键字大写、缩进 2 空格;若团队用小写或 4 空格,要么降级:pip install sqlparse==0.4.3,要么加参数:--keywords-case=lower --indent_width=4(仅 0.4.4+ 支持)
为什么格式化后表名全变小写了?
这是 SQLBeautifier 默认行为:它把所有标识符(库名、表名、字段名)统一转成小写。MySQL 开启 lower_case_table_names=0 时,SELECT * FROM UserLog 格式化后变成 SELECT * FROM userlog,直接报错 Table 'db.userlog' doesn't exist。
解决办法很简单,改配置:
- 菜单 → Preferences → Package Settings → SQLBeautifier → Settings
- 填入:
"keyword_case": "upper", "identifier_case": "preserve" - 切勿设成
"identifier_case": "lower",除非你确定所有库表名都该小写
注意:preserve 在旧版 SQLBeautifier v1.2.3 及更早版本不支持,此时只能降级或换用 SQLTools + pg_format。
快捷键按了没反应?先看这三处
插件装了、命令面板里也搜得到,但 Ctrl+Alt+F 就是没反应——大概率不是插件坏了,而是环境没对上。
- 文件类型没设对:即使后缀是
.sql,右下角显示的可能是Plain Text。必须点右下角语言名 → 输入SQL→ 选中SQL(不是SQL (MySQL)或PL/SQL,除非你明确需要方言高亮) - 快捷键冲突:SQLTools 默认没绑定快捷键。要手动加,在
Preferences → Key Bindings用户设置里加一行:{"keys": ["ctrl+alt+f"], "command": "sqltools_format_sql"} - 依赖没装全:SQLTools 必须搭配
SQLTools Core使用。只装SQLTools主包,命令面板里一定搜不到Format SQL——安装时 Package Control 会提示是否同时安装 Core,点“是”
复杂 CTE 或带变量拼接的动态 SQL(比如含 CONCAT('SELECT * FROM ', @table_name)),格式化器容易解析失败。这时候别硬刚,先把非核心部分注释掉再试。读得清,比排得齐重要。











