^\s*$ 是唯一能真正一键删除所有空行(含空格、tab、全角空格等伪空行)的正则写法,因其匹配整行仅含空白字符或为空,兼容 lf/crlf/cr 且不依赖跨行设置;其他写法如 ^$、\n\n、^\s*\n 或 ^s*$ 均存在漏删、跨平台失效、粘连代码或语法错误等硬伤。

用 ^\s*$ 就能真正一键删掉所有空行(包括带空格、Tab、全角空格的“伪空行”),但必须关掉 . matches newline,且替换框绝对不能填任何字符——填了 \n 或空格,反而会让空行越删越多。
为什么 ^\s*$ 是唯一靠谱的写法
它匹配的是「整行从头到尾只含空白字符(或完全为空)」,\s 在 Sublime 中默认覆盖空格、\t、\r、\f 等,不依赖换行符类型(LF/CRLF/CR),也不吃跨行内容。其他常见写法都有硬伤:
-
^$:漏掉末尾有空格或 Tab 的行,复制粘贴来的“空行”基本都删不干净 -
\n\n:Windows 下\r\n\r\n完全不匹配,跨平台失效 -
^\s*\n:把换行符也当内容吞掉,删完可能让两行代码“焊”在一起 -
^s*$(少反斜杠):Sublime 直接不识别,搜不到任何结果
三个必调的面板设置,错一个就失败
不是正则写错了,而是环境没配对:
- 右下角
.*图标必须点亮(启用正则) -
\n图标一定不能高亮(即禁用. matches newline) -
Replace With框必须彻底为空——连空格、\n、零宽字符都不能有 - 中文输入法(如搜狗)常劫持
Cmd+H或阻止粘贴,建议切英文后手动敲^\s*$
删完末尾还剩一两个空行?不是 bug,是行为逻辑
^\s*$ 匹配的是「有换行符边界的行」。如果文件结尾是 \n\n(最后两行都空),它能删倒数第二行;但如果 EOF 前只有 \n(最后一行为空但无结尾换行符),那一行根本不会被锚定匹配。
补救方法极简单:
- 把光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 这个快捷键会干净删除该行并自动补上换行符,不会让上下文“焊”在一起
- 别用
Delete或Backspace——它们只删光标前字符,容易留下视觉空行
真正容易被忽略的是:删完后文件末尾可能没换行符。如果项目要求 POSIX 兼容(比如 Python 脚本、Shell 配置),记得手动补一个,或运行 Ctrl+Shift+P → Insert Final Newline。











