应使用^\s*\r?\n匹配并删除视觉空白行,避免误删缩进行;多空行分步压缩为单空行以保留Markdown段落间距;大文件需分批处理并先保存。

Sublime Text 用正则批量删空行,别用 ^\s*$ 直接替换
这个正则看起来对,但实际会把“只含空格或制表符”的行也删掉,而这类行在 Python、YAML 或缩进敏感代码里可能有语义。真正要删的是**视觉上完全空白且不参与缩进逻辑的行**。
实操建议:
- 打开「Find → Replace」(
Ctrl+H/Cmd+H),勾选Regular Expression - 查找框填:
^\s*\n—— 匹配“行首到换行符之间只有空白字符”的整行 - 替换框留空,点
Replace All - 如果文件结尾有多个连续空行,上面操作只删中间的;补一刀:
\n\s*\Z→ 替换为空,删尾部残留
删空行时保留段落间距(比如 Markdown 段落间空一行)
直接删所有空行会让 Markdown 渲染出连在一起的段落,失去换行语义。得区分“单空行”和“多空行”。
实操建议:
- 先删多余空行:用
\n{3,}匹配 3 个及以上连续换行,替换成\n\n - 再处理“两空行变一空行”:用
\n\n(?=\n)(正向先行断言),替换成\n,避免误伤段落分隔 - 注意顺序不能反,否则第二步会把刚压缩好的
\n\n又拆开
Windows 和 macOS/Linux 换行符不一致导致正则失效
Sublime 默认按文件当前编码和换行符类型解析 \n。如果文件是 CRLF(Windows 风格),^\s*\n 会漏掉回车,匹配失败。
实操建议:
- 先看右下角状态栏显示的换行格式(
LF/CRLF/CR) - 若为
CRLF,查找用:^\s*\r?\n(兼容 LF 和 CRLF) - 更稳妥:统一换行符(
File → Line Endings → Unix (LF)),再执行正则 - 不建议用
\R—— Sublime 的 PCRE 引擎不支持这个通用换行符语法
大文件慎用「Replace All」,容易卡死或丢数据
超过 10MB 的日志或生成代码,正则全量替换可能让 Sublime 无响应,甚至替换中途崩溃导致内容丢失。
实操建议:
- 先用
Find All看匹配数量,超 5000 行就分批处理 - 选中某一段(比如一个函数块),用
Ctrl+H→In Selection勾选后替换 - 操作前务必
Ctrl+S保存,或启用Settings → atomic_save: true - 终极保险:命令行辅助,比如
sed '/^[[:space:]]*$/d' file.txt > clean.txt
正则删空行看着简单,但换行符、缩进语义、文件大小这三点一叠加,很容易替错或卡住。动手前先确认文件换行格式,再决定用 ^\s*\r?\n 还是更保守的手动分段处理。










