结论:用^\s$配合Sublime正则替换并关闭“. matches newline”,可精准删除所有空行及伪空行;因\s涵盖空格、制表符、\r等,^$漏删带空白的行,^\s\n或\n\s\n易误删或需开启跨行匹配,而^\s$天然按行锚定、适配各平台换行符。

直接说结论:用 ^\s*$ 配合 Sublime 的正则替换,就能真正“一键”删掉所有空行(包括带空格、Tab 的伪空行),但必须关掉 . matches newline,否则会漏删或出错。
为什么 ^\s*$ 是最稳的写法
它匹配的是「从行首开始、中间全是空白字符(含空格、\t、\r)、到行尾结束」的整行。Sublime 的 \s 默认包含 \r 和 \n 以外的所有空白,足够覆盖常见伪空行。
-
^$看似简单,但只匹配真正什么都没有的行——只要某行末尾有空格,它就完全失效 -
^\s*\n会把换行符也当作内容匹配进去,替换后可能残留异常换行或错位 -
\n\s*\n属于跨行匹配,必须开启. matches newline,但一开这个,.*就能吞掉换行符,导致段落被意外合并 - 别信网上写的
^s*$(少了个反斜杠)——那是错的,Sublime 会直接不识别
操作时最容易踩的三个坑
不是正则写错,而是面板设置和上下文干扰:
- 右下角
.*按钮要亮起(启用正则),但\n图标一定不能高亮(即 不要勾选. matches newline) - 替换框必须完全为空——填
\n或空格会导致每删一行反而多塞一个换行,越删越多 - 中文输入法(比如搜狗、百度)常劫持
Cmd+H或阻止粘贴,建议先切英文输入法,再手动敲^\s*$,别依赖复制粘贴
删完发现末尾还剩一两个空行?这是正常现象
因为 ^\s*$ 匹配的是「有换行符的行」,而文件末尾若以空行结尾且没有换行符(即 EOF 前是 \n\n 而不是 \n\n\n),最后一行就无法被匹配。
- 补救方法很简单:把光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 如果想一劳永逸,可额外跑一次
\n\s*\Z→ 空(需开启 PCRE,但 Sublime 默认不支持;不如手动删来得稳) - 对 Python 文件尤其要注意:
def或class后按规定应空两行,全删可能导致 PEP 8 报错
真正麻烦的从来不是怎么删,而是删完要不要留分隔、哪些空行其实承载语义(比如 Markdown 段落间那个空行)。^\s*$ 是个干净的起点,但下一步是否压缩为单空行、是否保留段落间距,得看文档类型和协作规范。

















