用^\s*$替换为空可彻底删除所有“看着空”的行,包括含空格、tab、全角空格、bom等伪空行;^$仅匹配绝对空行易遗漏,且必须启用正则、禁用“. matches newline”、替换框留空。

直接用 ^\s*$ 替换为空,就能清掉所有“看着空”的行——包括带空格、Tab、全角空格甚至 BOM 的伪空行;别用 ^$,它只认真·空行,漏得厉害。
为什么 ^\s*$ 是唯一靠谱的写法
这个正则匹配的是“从行首到行尾只有空白字符(含空格、\t、\r、\n)或完全为空”的整行。它不依赖换行符类型(LF/CRLF 都行),也不跨行,天然适配 Sublime 的行锚定逻辑。^$ 只匹配绝对空行,只要末尾多一个空格就失效;\n\n 在 Windows 文件里基本不匹配,还容易把合法段落间距卷进去删掉;^\s*\n 会吞掉换行符,导致上下两行“焊”在一起。
三个界面开关,错一个就白忙
不是正则写错了,而是面板配置干扰:
- 右下角
.*图标必须点亮(启用正则) - 右下角
\n图标一定不能高亮(即禁用. matches newline,勾上它会让\s*跨行吞内容) -
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(即最后两行都空),它能删掉倒数第二行;但如果 EOF 前只有 \n(最后一行为空但无结尾换行符),这行在 Sublime 内部不被视为“可被 ^/$ 锚定的一行”,自然不匹配:
- 补救方法很简单:光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 这个快捷键会干净删除该行并自动补上换行符,不会破坏上下文
- 别用
Delete或Backspace——它们只删光标前字符,极易留下“看着空、实则含隐形字符”的行
真正容易被忽略的是:删完后文件末尾可能没换行符——这不是正则的问题,是 Sublime 对 EOF 行的处理边界,得人来判断要不要补。











