prettier-sql 格式化失效需同时满足三条件:文件语言模式为小写 sql、settings.json 中配置 "[sql]": {"editor.defaultformatter": "esbenp.prettier-vscode"}、项目本地安装 prettier-plugin-sql。

VSCode 里装了 Prettier-SQL 插件却按 Shift+Alt+F 没反应、保存也不格式化?不是插件坏了,是它根本没被“认领”——Prettier 官方插件 esbenp.prettier-vscode 默认不处理 SQL,必须手动接管,且需绕过两个关键陷阱。
为什么 Prettier 默认不格式化 SQL?
Prettier 的核心设计只覆盖 JS/TS/HTML/CSS/MD 等语言,SQL 不在其原生支持列表中。即使你装了 prettier-plugin-sql,esbenp.prettier-vscode 也不会自动识别或调用它——它连 SQL 文件的语言模式都默认忽略。
- 右下角显示
Plain Text或SQL(非小写sql)?VSCode 就不会触发任何格式化逻辑 -
settings.json里没写"[sql]": { ... }块?那 Prettier 根本不知道“SQL 归我管” - 装了
prettier-plugin-sql但没在项目里npm install?插件会静默跳过,不报错也不提示
如何让 Prettier 正确接管 SQL 格式化?
必须同时满足三个条件:语言模式为小写 sql、Prettier 被设为该语言的默认 formatter、prettier-plugin-sql 在项目中可用。
- 确保文件语言模式是
sql:点击右下角状态栏 → 输入sql→ 选第一个SQL(注意不是 MySQL/PostgreSQL),或快捷键Ctrl+K M(Win/Linux)/Cmd+K M(macOS) - 在
settings.json中添加语言专属配置(不能只靠全局editor.defaultFormatter):"[sql]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true } - 项目根目录执行:
npm install --save-dev prettier prettier-plugin-sql;若用 pnpm/yarn,确保对应安装,否则插件无法加载 - 可选但推荐:加
.prettierrc显式启用 SQL 插件:{ "plugins": ["prettier-plugin-sql"], "sqlIndent": 2, "sqlKeywordCase": "upper", "sqlFunctionCase": "lower" }
常见失效现象与对应解法
格式化后关键字全小写、字段名被大写、逗号跑到行首?这不是 bug,是插件未读取配置或配置项名写错。
-
"sqlKeywordCase": "upper"写成"keywordCase"?Prettier-SQL 忽略,退回到默认小写 - 用了
pgFormatter或sql-formatter插件,却在settings.json里绑了esbenp.prettier-vscode?两者不兼容,必须卸载冲突插件 - SQL 文件带 Hive/Spark 扩展名(如
.hql,.sqlx)?需额外加文件关联:"files.associations": { "*.hql": "sql", "*.sqlx": "sql" } - 格式化卡住、CPU 占满?检查是否混用了
sql-beautify等解析器——Prettier-SQL 依赖 AST,遇到语法模糊的方言(如老版 HiveQL)会挂起
最易被忽略的是:Prettier-SQL 插件必须由项目本地的 prettier 实例加载,全局安装无效;且一旦 .prettierrc 有语法错误(比如多了一个逗号),它就彻底静默退出,连日志都不打。建议先用最小配置验证,再逐步加规则。











