notepad++ 默认不支持 sql 格式化,ctrl+alt+f 无效;需借助 poor man's t-sql formatter 插件(t-sql 场景)或 nppexec + pgformatter(多数据库兼容),否则仅能靠正则临时分段。

Notepad++ 本身不支持 SQL 美化,所有“一键格式化”效果都依赖插件或外部命令行工具——这是你反复点 Ctrl+Alt+F 却没反应的根本原因。
为什么内置格式化对 SQL 完全无效
Notepad++ 的“格式化”菜单(如 Ctrl+Alt+F)只对部分语言(如 XML、HTML)生效,SQL 模式下该功能压根未注册。即使你手动把文件设为 SQL 语言、后缀改为 .sql,也不会触发任何缩进或换行逻辑。
- 语法高亮 ≠ 格式化:高亮只是着色,不影响结构
- 自动缩进只响应
{}或begin/end类块,而标准 SQL(尤其 T-SQL)不强制用块标记 - 右键菜单里没有“Format SQL”选项,说明底层无实现
推荐方案:Poor Man's T-SQL Formatter 插件(T-SQL/SQL Server 场景)
这是目前最轻量、免配置、开箱即用的方案,专为 T-SQL 设计,对 DECLARE @x INT、WITH cte AS、GO 分隔符等兼容性好,且不依赖外部进程。
- 安装路径:
插件 → 插件管理 → 找到 PoorMansTSqlFormatter → 安装 - 使用方式:选中 SQL 文本 or 全文(Ctrl+A),然后
插件 → Poor Man's T-SQL Formatter → Format - 快捷键绑定:进入
设置 → 快捷键 → 插件 → PoorMansTSqlFormatter::Format,设为Ctrl+Shift+F等常用组合 - 注意:它默认按 SQL Server 规则处理;若含
/*+ INDEX(t idx) */这类 Oracle hint,会解析失败——这类场景必须换pgFormatter
更通用方案:NppExec + pgFormatter(MySQL/PostgreSQL/Oracle/T-SQL 全支持)
当你的 SQL 跨数据库(比如混合用了 $$ 块、USING 语法、PL/pgSQL 变量声明),Poor Man's 会漏判或错切,此时必须用 pgFormatter。
- 先确保
pg_format.exe在系统 PATH 中,或在脚本里写绝对路径(如C:\tools\pg_format.exe) - NppExec 脚本内容(注意
--type tsql或--type plpgsql必须显式指定):NPP_SAVE cmd /c"pg_format --reindent --keyword-case lower --wrap 80 --type tsql "$(FULL_CURRENT_PATH)" > "$(FULL_CURRENT_PATH).fmt" && move /y "$(FULL_CURRENT_PATH).fmt" "$(FULL_CURRENT_PATH)" >nul"
- 关键参数:
--reindent控制缩进(不加就只换行),--wrap 80防止长字段名撑出屏幕,--type决定能否识别DECLARE或$$ - 编码陷阱:如果 SQL 文件含中文注释但 Notepad++ 右下角显示
ANSI,pgFormatter会报invalid byte sequence;务必先执行编码 → 转为 UTF-8
临时救急:正则替换做基础分段(无插件/无外部工具)
当你在客户现场临时调试、无法安装任何插件,可用内置正则快速分离关键子句,虽不智能但能立刻提升可读性。
- 操作路径:
Search → Replace → 勾选“正则表达式” - 查找:
\s+(AND|OR|FROM|JOIN|WHERE|GROUP\s+BY|ORDER\s+BY|HAVING|UNION|SELECT|INSERT|UPDATE|DELETE)\s+ - 替换:
\r\n$1(注意末尾带一个空格,否则关键字紧贴换行) - 局限:不能处理嵌套括号、字符串内关键字、多行注释
/* ... */;若 SQL 含SELECT * FROM t WHERE name = 'A AND B',会错误切开
真正可靠的美化不是“看起来整齐”,而是让 WHERE 条件对齐、JOIN 从句可横向对比、子查询缩进层级清晰——这要求工具理解 SQL 语法树,而非仅靠空格和关键词匹配。别省那两分钟装插件,否则每次手动调空格的时间加起来远超一次配置。











