用 ^\s*$ 替换为空是唯一可靠方案,它匹配整行仅含空白或完全为空的行,兼容lf/crlf,而^$、\n\n等写法存在漏删、跨平台失效或粘连代码等问题。

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











