^\s*$是唯一能真正删除所有空行(含空格、Tab、全角空格等伪空行)的正则,需关闭“. matches newline”,且Replace With必须为空;其他写法或漏匹配、或跨行、或不兼容换行符。

用 ^\s*$ 就能真正一键删掉所有空行(含带空格、Tab、全角空格的“伪空行”),但必须关掉 . matches newline,且 Replace With 框绝对不能填任何字符——包括空格、\n 或不可见符号。
为什么 ^\s*$ 是唯一靠谱的写法
它匹配的是「整行内容从头到尾只有空白字符(\s)或完全为空」,不依赖换行符类型(LF/CRLF/CR 都行),也不跨行。其他常见写法问题明显:
-
^$:漏删带空格或\t的行;文件末尾没换行符时,最后一空行直接跳过 -
\n\n:Windows 用\r\n,这个表达式根本匹配不上 -
^\s*\n:把换行符也当内容吞进去,删完可能让上下两行“焊”在一起 -
^s*$(少反斜杠):Sublime 完全不识别,搜不到任何内容
三个必调的面板设置,错一个就失效
不是正则写错了,而是界面配置干扰导致失败:
- 右下角
.*图标必须点亮(启用正则) - 右下角
\n图标一定不能高亮(即禁用. matches newline) -
Replace With框必须彻底为空——填了\n或一个空格,等于每删一行反而多塞一个换行,越删越多
中文文档、网页粘贴内容常藏“隐形空行”
普通 \s 不覆盖全角空格(\u3000)、BOM(\ufeff)、零宽空格(\u200b)、不间断空格(\u00a0)。这些字符会让“看着空”的行逃过 ^\s*$。
- 先开
View → Show White Space(或Ctrl+Shift+P输入toggle_whitespace),看行首是否显示·或→ - 如果看到
U+200B或EF BB BF标记,查找内容就得改成:^[\s\u200b\uFEFF\u00a0\u3000]*$ - 仍要确保
. matches newline关闭,否则加料后行为不可控
删完末尾还剩一两个空行?不是 bug,是设计逻辑
^\s*$ 匹配的是「有换行符边界的一行」。如果文件结尾是 \n\n(即最后两行都空),它能删掉倒数第二行;但如果结尾是 \n\n 且 EOF 前没有第三个 \n,最后一行就无法被锚定匹配。
- 补救方法:光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 这个快捷键会干净删除该行并自动补上换行符,不会让上下两行“焊”在一起
- 别用
Delete或Backspace——它们只删光标前字符,容易留下视觉空行
真正容易被忽略的是:删完后文件末尾可能没换行符。如果项目要求 POSIX 兼容(比如 Python 脚本、Shell 配置),记得手动补一个,或运行 Ctrl+Shift+P → Insert Final Newline。


















