^\s\$ 才能真正删干净所有空行,包括含空格、制表符等空白字符的“伪空行”;^$仅匹配完全无字符的行,易遗漏缩进空行,且在sublime中^\s\$天然兼容lf与crlf,末尾无换行符时仍有效。

用 ^\s*$ 匹配所有空行,不是 ^$
直接上结论:^\s*$ 才能真正删干净——它匹配“从行首到行尾只有空白字符(含空格、\t、\r、\n)”的行;而 ^$ 只认“什么都没有”的行,遇到带缩进或空格的“伪空行”就漏掉。
-
^\s*$在 Sublime 里默认按行锚定,天然兼容LF和CRLF换行格式,不用额外处理\r - 别手滑勾选
. matches newline:一勾上,.就会跨行吞内容,^和$失效,整段可能被误删 - 如果文件末尾没换行符(EOF 前是空行),
^\s*$仍能匹配它——这点比^\s*$\n更稳
替换框必须留空,别填 \n 或其他字符
填 \n 看似“补个换行”,实际会在原位置多塞一个换行符,导致空行翻倍;填空字符串才是真删除。
- Sublime 的“替换为空”本质是移除整行(含其换行符),不是“清空内容”
- 若文件最后一行为空且无结尾换行符,
^\s*$仍会匹配并删掉它,不会残留视觉误差 - 删完后若发现格式异常(如两行代码粘连),大概率是误用了
Ctrl+Shift+K——那个快捷键删的是“当前光标所在行 + 换行符”,不是按语义删空行
大文件或项目级批量处理要分步验证
超过 10MB 的日志或生成代码,Replace All 容易卡死甚至崩溃丢数据。别信“一键”,先看匹配数。
- 先点
Find All,右下角看匹配行数:超 5000 行就别全量替换 - 选中一段(比如一个函数块或配置节),勾选
In Selection再替换,可控性高 - 用
Find in Files批量处理多文件时,务必关掉Case sensitive和Whole word——它们会让^/$失效 - UTF-8 with BOM 文件可能干扰匹配,可临时转成 UTF-8 without BOM,或改用显式模式:
^[ \t\r\n]*$
保留单个空行的压缩方案:\n{2,} → \n\n
想留段落间距?别用负向断言或复杂正则,\n{2,} 直接、明确、跨平台安全。
-
\n{2,}匹配两个及以上连续换行符(自动适配\r\n场景,因 Sublime 的\n在 CRLF 文件里也匹配\r\n) - 替换为
\n\n,就能把\n\n\n\n压成\n\n,中间空行不丢 - 这个操作可反复执行,直到
Find All显示 0 匹配,说明已收敛 - 注意:它不处理“带空格的空行”,所以得先跑一遍
^\s*$清掉伪空行,再跑\n{2,}压缩











