最可靠方法是正则替换:查找^\s*$\r?\n,替换为空,可删除含空格、制表符、BOM等所有“伪空行”,兼容Windows/Unix换行,且需预览高亮确认。

Notepad++ 正则删空行必须用 ^\s*$,不是 ^$ 或 ^\s+
因为 ^$ 只匹配真正“什么都没有”的行(不含空格、制表符、BOM),而现实中大量“空行”其实是 + 换行,或带 UTF-8 BOM 的首行;^\s+ 又只匹配“开头有空白”的行,漏掉纯 \r\n 这种。只有 ^\s*$ 覆盖全部:行首到行尾之间全是空白(含零个)才触发。
实操要点:
- 必须勾选「正则表达式」模式,不能选「扩展」或「普通」
- 不用管「. 匹配换行符」——这个选项对
^$无影响,但勾上反而可能干扰其他场景 - 别加
m或g标志,Notepad++ 不识别,会直接失效 - 建议先按
Ctrl + F输入^\s*$(同样勾选正则),点「全部高亮显示」预览,确认要删的行都标蓝了再动手
换行符兼容性靠 \r?\n,不是 \R 或硬写 \r\n
\R 看起来通用,但它在 Notepad++ 7.9+ 才稳定支持,旧版(尤其企业内网常见 7.5.9 或更早)会不识别或误匹配;硬写 \r\n 则在 Unix 风格文件里完全失效。最稳的是显式写 \r?\n:问号表示 \r 可选,能同时吃掉 \n(Linux/macOS)和 \r\n(Windows)。
所以完整查找目标是:^\s*$\r?\n,替换为空。注意:
- 这个表达式会删掉“行内容+换行符”,不会残留空行
- 如果最后一行没换行符(文件末尾直接结束),
\r?\n不会匹配它,得额外跑一次^\s*$(不带换行符)补删 - 大文件慎用「全部替换」后立刻保存——网络挂载或远程 FTP 模式下,卡住可能导致状态丢失
菜单「移除空行」失效时,说明插件被禁或版本阉割
Notepad++ 官方版默认有「编辑 → 行操作 → 移除空行」,它底层就是用 ^\s*$ 逻辑实现的,不依赖正则引擎、不挑编码、也不怕 BOM。但如果点开菜单看不到这项,大概率是:
- 用了便携精简版(如某些 IT 部门统一部署的定制包)
- 插件管理器里禁用了
Line Operations插件(路径:设置 → 导入 → 重置为默认设置 可恢复) - 当前文档编码异常(比如 ANSI + 混合 Unicode 字符),导致功能灰显
此时别折腾插件重装,直接切正则方案更省时间——只要确保 ^\s*$\r?\n 写对,效果和菜单完全一致。
想保留一个空行?得改逻辑,不能靠“删完再加”
工程中常需压缩 \n\n\n → \n\n,而不是全清。这时候不能先删光再手动加回,容易错位。正确做法是分两步:
- 先合并多余空行:
(\r?\n)\s*(\r?\n)→ 替换为$1$1(保留一个换行) - 再清理带空白的伪空行:
^\s+$\r?\n→ 替换为空(注意这里是+,只删“有空白”的行,放过纯空行) - 两个步骤顺序不能反,否则第二步会把刚合并出来的单空行也干掉
真正难的从来不是正则怎么写,而是业务规则是否明确:日志里两个空行分隔段落,代码里三个空行算违规,Markdown 中连续空行渲染为段间距……删哪几行,得先问清楚“为什么空”。


















