notepad++ 7.9+「移除空白行」可安全删除纯空行及含空格、制表符、bom 的伪空行,不破坏编码与换行符;若菜单缺失,改用正则 ^\s*$\r?\n 替换,注意禁用扩展模式、勿加g/m标志,并统一换行格式防后续异常。

优先用「编辑 → 行操作 → 移除空白行(包括空白字符)」
这个菜单项是 Notepad++ 7.9+ 内置功能,能删掉纯空行、仅含空格/\t/不可见 BOM 的“伪空行”,不依赖正则、不改换行符、不破坏 UTF-8-BOM。它比老教程里提的 TextFX 插件更稳——TextFX 在 Unicode 文件里常乱码,还可能吞掉文件开头的 \uFEFF。
如果菜单里没看到这项,说明你用的是极简版、便携版被裁剪过,或插件被禁用。别折腾重装,直接切正则方案。
- 操作前先确认文件未设为只读(右下角状态栏会显示
只读) - 该命令对
ANSI、UTF-8、GBK编码都有效,但不处理零宽空格(\u200B)这类 Unicode 特殊空白 - 删完建议打开「视图 → 显示符号 → 显示所有字符」,确认没有残留
¶或·占位符
正则替换必须用 ^\s*$\r?\n,不是 ^\s+ 或 \r\n\r\n
^\s+$ 只匹配行首到行尾全是空白的整行,\r?\n 确保兼容 Windows(\r\n)和 Unix(\n)换行;而网上常见的 ^\s+ 只删“开头有空白”的行,漏掉真正纯空的 \n 行;\r\n\r\n 又只能处理双空行,遇到三个连空就失效。
实操时:Ctrl + H → 勾选「正则表达式」→ 「查找目标」填 ^\s*$\r?\n → 「替换为」留空 → 点「全部替换」。
- 千万别选「扩展模式」——它不支持
^、$和\s,根本没法做整行判断 - 不要加
g或m标志,Notepad++ 正则引擎不认,会报错或无响应 - 替换前务必先用
Ctrl + F输入^\s*$(同样勾选正则),点「全部高亮显示」预览将被删的行
删完空行后格式错乱?先看状态栏换行符类型
Notepad++ 默认按当前文件识别换行符,但「移除空白行」和正则替换都不自动统一换行格式。删完发现段落粘连、Git 提交报 CRLF 警告、或 Python 里 readlines() 多出空字符串,大概率是混用了 DOS(\r\n)、UNIX(\n)、MAC(\r)格式。
解决方法:点状态栏右下角(显示 DOS/UNIX/MAC 的地方)→ 左键选择对应系统常用格式 → 再执行一次空行清理。
- Windows 开发建议统一转为
DOS格式;Linux/macOS 脚本建议用UNIX - 这步不解决空行本身,但能避免后续在终端、IDE、Git 中出现诡异换行问题
- 远程 FTP 编辑时慎用「全部替换」,网络延迟可能导致操作卡住并丢失状态
想保留一个空行?得改正则逻辑,不能靠菜单一键
内置菜单和基础正则 ^\s*$\r?\n 是无差别清除,工程中常需「压缩连续空行」——比如把 \n\n\n 变成 \n\n,或只删带空格的伪空行、保留纯空行做段落分隔。
这时得手动调正则:
压缩相邻空行:查找 (\r?\n)\s*(\r?\n),替换为 $1$2;
只删带空白的行(保留纯空行):查找 ^\s+\r?\n,替换为空。
- 这类捕获组写法必须关掉「匹配大小写」和「全字匹配」,否则
$1无法正确引用 - 正则替换是全局生效的,大文件误操作后
Ctrl + Z可能无法逐层撤回,建议先Ctrl + A→Ctrl + C备份到新标签页 - 真正难的不是语法,而是业务规则:日志文件要删所有空行,配置文件可能要留一个分隔,正则得跟着变











