^\s*$ 是 sublime text 清理“视觉空行”最稳的正则,需关闭 . matches newline 且替换框留空;它比 ^$ 更可靠,因 \s 覆盖空格、tab 等常见空白,兼容不可见字符,而 ^$ 要求绝对空。

直接说结论:^\s*$ 是 Sublime Text 里清理“视觉空行”最稳的正则,但必须关掉 . matches newline,替换框必须留空——填 \n 或空格反而会多出空行。
为什么 ^\s*$ 比 ^$ 更可靠
^$ 只匹配真正什么都没有的行:连空格、Tab、全角空格、零宽空格(\u200b)都不能有。而实际中,从网页复制、Excel 导出、或某些 IDE 生成的“空行”,常混入不可见字符。^\s*$ 中的 \s 默认覆盖空格、\t、\r、\n 等常见空白,不依赖换行符类型,也不需要开启跨行匹配。
常见错误现象:
- 写成
^s*$(少反斜杠)→ Sublime 完全不识别,搜不到任何内容 - 用了
^\s*\n→ 把换行符也当内容匹配进去,替换后可能残留异常换行或错位 - 开了
. matches newline后用.*类表达式 →^和$失效,整段被吞掉
删完末尾还剩一两个空行?不是 bug,是设计使然
^\s*$ 匹配的是「有换行符的行」,而文件末尾若以 \n\n 结尾(即最后两行都是空行),它能删掉倒数第二行;但如果结尾是 \n\n 且 EOF 前没有第三个 \n,最后一行就无法被 ^/$ 锚定匹配。
补救方法很简单:
- 把光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 别用
Delete或Backspace—— 它们只删光标前字符,容易留下“视觉空行” -
Ctrl+Shift+K会干净删除整行并自动补上换行符,不会让上下两行“焊”在一起
处理中文文档或网页粘贴内容时,得手动加料
普通 \s 不匹配全角空格(\u3000)、不间断空格(\u00a0)、零宽空格(\u200b)或 BOM(\ufeff)。这些字符常藏在“看着空”的行里。
实操建议:
- 先开
View → Show White Space(或Ctrl+Shift+P输入toggle_whitespace),让空格、Tab、换行符显形 - 如果看到行首有
·(空格)或→(Tab),说明^\s*$仍能匹配 - 如果看到
U+200B或BOM标记,查找框就得改成:^[\s\u200b\uFEFF\u00a0\u3000]*$ - 注意:此时仍要关掉
. matches newline,否则表达式行为不可控
批量删多个文件?别信「Replace All in Files」
在「Find in Files」对话框里对 ^\s*$ 执行「Replace All in Files」,Sublime 实际是把匹配行替换成空字符串,**但不删除换行符本身**。结果是空行变成“长度为 0 的行”,界面看起来还是空的,文件体积没变,后续正则还会反复命中它。
更可行的做法:
- 用
Find in Files先找出含空行的文件列表 - 手动逐个打开 → 用
^\s*$+Ctrl+Shift+K处理 - 大文件(>10MB)或几十个文件批量处理时,改用命令行更可靠,比如:
sed '/^[[:space:]]*$/d' file.txt(Linux/macOS) - 如果必须用 Sublime 自动化,注意检查右下角编码是否为
UTF-8,BOM 文件需前置过滤
真正容易被忽略的是:Sublime 的 ^ 和 $ 行锚定行为,完全依赖是否勾选了 Regular Expression。没勾选时,它们就是普通字符;勾选后才生效——这点不注意,正则写得再对也白搭。











