sqlbeautifier是sublime text中真正可用、稳定且开箱即用的sql格式化插件,prettier-sql并不存在;需通过package control安装,确保语法设为sql、快捷键正确绑定,并配置reindent、split_multiple_from等参数提升可读性。

Sublime Text 没有 Prettier-SQL 这个插件,也不存在官方或主流维护的 “Prettier for SQL” 工具 —— 你真正能用、稳定、开箱即用的只有 SqlBeautifier。
为什么搜不到 Prettier-SQL?
所谓 “Prettier-SQL” 是常见误传:Prettier 官方从不支持 SQL;社区曾有零星实验性分支(如 prettier-sql),但均已归档、无更新、不兼容 Sublime Text 4,且依赖 Node.js 环境却无法正确解析多层子查询和方言差异(如 PostgreSQL 的 ILIKE 或 MySQL 的 GROUP_CONCAT)。
实际项目中,所有可靠 SQL 格式化行为都由 Python 库 sqlparse 驱动,SqlBeautifier 就是它在 Sublime 中最成熟封装。
- 查 npm 或 GitHub 搜索
prettier-sql,最新 commit 停留在 2021 年,star 数<50,issue 大量报错“关键字未大写”“JOIN 块缩进错位” - Sublime 控制台执行
import sqlparse成功,但import prettier_sql直接报ModuleNotFoundError - 试图用 JsPrettier 强行加载 SQL 文件?它会静默跳过 —— 因为配置里根本没注册
sql类型扩展名
SqlBeautifier 怎么装才不踩坑?
别走快捷通道:用 Package Control 安装后,必须立刻验证是否生效。很多人卡在“按快捷键没反应”,其实只是插件没真正加载。
- 安装完重启 Sublime,打开任意
.sql文件,右下角语言模式必须显示SQL(不是Plain Text或MySQL);若显示错误,手动点击右下角切换 - 快捷键
Ctrl+K后按Ctrl+F(Windows/Linux)或Cmd+K后按Cmd+F(macOS),不是单次组合键 - 如果仍无响应,打开控制台(
Ctrl+`),输入sublime.log_commands(True),再试一次快捷键 —— 看输出里有没有sql_beautifier相关命令 - 确认插件目录存在:
Packages/SqlBeautifier/下应有sql_beautifier.py和sqlparse子模块;若为空,说明 git clone 失败,需手动下载 release zip 并解压到Packages目录
复杂查询格式化时的关键参数怎么调?
多表 JOIN + 多层子查询的语句,SqlBeautifier 默认配置容易把 ON 条件挤成一行、子查询括号不换行,导致可读性反而下降。必须改用户配置:
打开 Preferences → Package Settings → Sql Beautifier → Settings – User,填入:
{
"keyword_case": "upper",
"indent_width": 2,
"reindent": true,
"strip_comments": false,
"comma_first": false,
"wrap_after_comma": true,
"split_multiple_from": true
}
-
"wrap_after_comma": true让字段列表每项独占一行(避免SELECT a,b,c FROM...连写) -
"split_multiple_from": true强制每个JOIN单独成行,且ON条件自动缩进对齐 -
"comma_first": false别开这个 —— 开启后逗号前置(, field1\n, field2)会干扰你用列选模式批量删字段 - 子查询缩进靠
"reindent": true驱动,但必须确保原始 SQL 里括号配对完整;缺一个),整个块会缩进错乱
格式化后还要注意什么?
格式化只是视觉整理,不校验语法,也不适配数据库方言。你写的是 PostgreSQL 的 EXISTS (SELECT 1 FROM ...),但目标库是 SQLite —— SqlBeautifier 不会提醒你 SQLite 不支持 EXISTS 子句中的某些写法。
- 格式化完务必复制到真实客户端(如 DBeaver、psql、MySQL Workbench)里执行
EXPLAIN或至少EXPLAIN FORMAT=TREE看执行计划 - 别依赖插件自动加反引号或双引号;MySQL 要
`user_id`,PostgreSQL 要"user_id",插件默认不处理,得手动补 - 如果用了 CTE(
WITH语句),确保SqlBeautifier版本 ≥ 2.1.0 —— 旧版会把WITH RECURSIVE错切成两行,破坏语法
真正的难点不在格式化,而在写完之后:你得知道哪一层子查询拖慢了全链路,而 Sublime 不提供执行能力 —— 它只负责让你看清自己写了什么。











