^\s*$ 是首选正则模式,因其匹配行首到行尾仅含空白字符的行,比 ^$ 更鲁棒,可识别带缩进的“伪空行”,但需配合 alt+enter 和 ctrl+shift+k 才能真正删除空行及对应换行符。

Sublime Text 里想一键删掉所有多行空白行(比如连续两个或以上的空行),^\s*$ 正则配合「Find All」+「Delete」是最稳的路径,但直接用会误删带空格的“伪空行”,也容易漏掉文件头尾的边界情况。
为什么 ^\s*$ 是首选正则模式
这个表达式匹配「行首到行尾之间只有零个或多个空白字符(含空格、制表符)」的行,比单纯写 ^$ 更鲁棒——后者只认纯空行,而实际编辑中常有带缩进空格或 tab 的“隐形空行”。但要注意:它默认不匹配换行符本身,所以删的是“行内容”,不是“换行符”,得配合操作才能真正压缩行距。
-
^锚定行首,$锚定行尾,确保整行都被判定 -
\s*包含空格、tab、换行符中的空白(在 Sublime 的 PCRE 引擎下,\s不含\n,但匹配行内空白足够) - 必须开启「Regular Expression」开关(快捷键
Alt+R或点击右下角图标)
真正“一键”的操作链:Find → Select → Delete → Clean
光高亮不够,得让 Sublime 把所有匹配行选中并连带删除其前后换行符,否则删完还剩一堆单空行。正确顺序是:
- 打开「Find → Find…」(
Ctrl+F),输入^\s*$,确认正则已启用 - 按
Alt+Enter(Find All),此时所有空行被选中(含光标停在每行开头) - 按
Ctrl+Shift+K(Split into Lines + Delete Line),这是关键——它会把每个选中行当作独立行删除,并自动移除该行对应的换行符 - 如果文件开头/结尾有多余空行,
Ctrl+Shift+K会一并处理;但若开头有 BOM 或结尾无换行符,可能残留,需手动检查
容易踩的坑:缩进空行、Markdown 分隔线、代码块间隙
真实文本里,“空行”常有语义。比如 Markdown 中用空行分隔段落,连续两个空行才表示段落间距加大;Python 代码里函数间通常用两个空行。盲目全删会破坏结构。
- 想保留单空行、只删≥2个连续空行?用
^\s*$(\r?\n\s*$)+(注意开启. matches newline),但 Sublime 对跨行匹配支持有限,更可靠的是先替换\n\s*\n为\n\n多轮迭代 - 遇到
---或***这类 Markdown 分隔线,它们常前后各带一个空行,^\s*$会误伤——建议先用「Find in Files」确认上下文,或加负向断言^(?!(---|\*\*\*|===)$)\s*$ - JSON/YAML 等格式文件慎用,某些解析器对末尾换行敏感,删完最好验证格式有效性
真正难的不是写正则,而是判断哪些空行该留、哪些该压成一个、哪些该彻底消失——尤其混着注释、模板变量、前端换行符时,得看上下文,不能无脑批量。











