用 ^\s*$ 配合「Find All」+「Replace」可删除所有空行(含空格、制表符等伪空行),需启用 Regex 且不勾选 . matches newline;仅用 ^$ 或 \n\n 等写法易漏删、误删或跨平台失效。

Sublime Text 用正则删除空行的正确写法
直接上结论:用 ^\s*$ 配合「Find All」+「Replace」就能干净删掉所有空行(含只有空格、制表符的“伪空行”),但必须勾选 Regex 和 . matches newline 以外的默认选项——否则会漏删或误删。
常见错误是只输 ^$,它只能匹配真正什么都没有的行,遇到 (几个空格)或 \t 就失效;还有人忘了关 . matches newline,导致 \s* 跨行吞内容。
- 打开「Find → Replace」(
Ctrl+H/Cmd+H) - 在「Find What」输入:
^\s*$ - 在「Replace With」留空
- 确保右下角
.*(Regex)已启用,且\n图标未高亮(即不勾选. matches newline) - 点
Replace All
为什么不能用 ^$\n 或 \n\n 替换
这类写法看似直观,实际问题很多:^$\n 会把最后一行空行漏掉(因为没换行符可匹配);\n\n 则可能把段落间正常空行和连续空行混着删,甚至误伤 if (a) {\n\n do(); 这类代码里的合法换行。
更麻烦的是兼容性:Windows 用 \r\n,macOS/Linux 用 \n,\n\n 在跨平台文件里表现不稳定。而 ^\s*$ 是按行锚定的,天然适配不同换行符。
-
^\s*$匹配整行只有空白字符(含\r、\n、\t、空格)的行 - Sublime 的
^和$默认匹配每行首尾,不是整个文档头尾 - 不需要手动处理
\r——\s已包含它
删完发现格式错乱?检查是否误删了“语义空行”
有些空行是有意义的:比如 Python 函数间、CSS 规则块之间、Markdown 段落分隔。盲目删光会导致可读性下降甚至语法报错(如 Python 缩进逻辑错乱)。
如果只是想清理多余空行(比如两个以上连续空行缩成一个),用这个正则更安全:\n\s*\n,替换为 \n\n,再跑一次即可。
- 先用
^\s*$清理单行空行 - 再用
\n\s*\n把多个连续空行压成两个(保留基本分隔) - 对 Python 文件,建议删前确认没有
def和class后少于两空行的情况
Mac 上 Command 键替换失效?注意输入法和快捷键冲突
部分中文输入法(如搜狗、百度)会劫持 Cmd+Shift+H 或 Cmd+Alt+F,导致正则替换面板打不开或无法粘贴 ^\s*$。这不是 Sublime 问题,而是系统级拦截。
临时解决办法:切换到英文输入法再操作;或者改用菜单栏「Find → Replace」,避免快捷键。
- 不要在中文输入法下尝试
Cmd+H,容易弹出系统帮助窗口 - 粘贴正则时,确保光标在「Find What」框内,且未被输入法候选框遮挡
- 如果
^\s*$粘贴后变成全角符号(如 ^ \s $),说明输入法仍在生效










