用^\s$配合关闭“. matches newline”并清空替换框,可精准删除所有视觉空行;^$漏删伪空行,^\s\n会导致代码粘连,\n\n跨平台失效,且必须确认正则启用、禁用跨行匹配、替换框为空。

用 ^\s*$ 配合关闭 . matches newline,就能真正删净所有“看着空”的行;但凡漏掉一个设置,或误填了替换内容,结果不是删不干净,就是把两行焊在一起。
为什么 ^\s*$ 是唯一靠谱的空行匹配写法
它匹配的是「整行只有空白字符(含空格、\t、\r、\n)或完全为空」,不依赖换行符类型,也不吞换行符本身——所以不会导致上下文粘连。
-
^$只认“行首紧接行尾”,只要末尾多一个空格或 Tab,就彻底失效 -
^\s*\n会把换行符当内容吃掉,删完可能让上一行末尾和下一行开头直接拼接 -
^s*$(少反斜杠)Sublime 完全不识别,搜不到任何东西 - Windows 的
\r\n、macOS 的\n、Linux 的\n,^\s*$全部兼容
三个必须手动确认的面板状态,错一个就白忙
不是正则写错了,而是界面配置拦住了它生效:
- 右下角
.*图标必须点亮(启用正则) - 右下角
\n图标一定不能高亮(即禁用. matches newline) -
Replace With框必须彻底为空——填了\n、空格、甚至不可见的零宽字符,等于每删一行反而多塞一个换行,越删越多
中文输入法(如搜狗、百度)常劫持 Cmd+H 或阻止粘贴,建议切英文输入法后手动敲 ^\s*$,别复制粘贴。
网页/Excel 粘贴来的“隐形空行”怎么处理
普通 \s 不覆盖全角空格(\u3000)、零宽空格(\u200b)、BOM(\uFEFF)、不间断空格(\u00a0)。这些会让“看着空”的行逃过 ^\s*$。
- 先按
Ctrl+Shift+P输入toggle_whitespace,看行首是否显示·或→ - 如果看到
U+200B或EF BB BF标记,查找内容就得改成:^[\s\u200b\uFEFF\u00a0\u3000]*$ - 仍要确保
. matches newline关闭,否则加料后行为不可控
删完末尾还剩一两个空行?这不是 bug,是设计逻辑
^\s*$ 匹配的是「有换行符边界的一行」。如果文件结尾是 \n\n(最后两行都空),它能删掉倒数第二行;但如果 EOF 前只有 \n(最后一行为空但无结尾换行符),这行在 Sublime 内部不被视为“可被 ^/$ 锚定的一行”,自然不匹配。
- 补救方法很简单:光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 这个快捷键会干净删除该行并自动补上换行符,不会破坏上下文
- 别用
Delete或Backspace——它们只删光标前字符,极易留下“看着空、实则含隐形字符”的行
真正容易被忽略的是:删完后文件末尾可能没换行符。如果项目要求 POSIX 兼容(比如 Python 脚本、Shell 配置),这点会触发 lint 报错或执行异常。

















