^\s*$是唯一靠谱的写法,因它精准匹配行首到行尾间仅含空白字符(空格、制表符、回车、全角/不间断空格等)或完全为空的整行,覆盖常见空白类型且跨平台安全,而^$漏伪空行、^\s*\n致行粘连、\s*$语法错误。

不能一键删光所有空行——但可以用 ^\s*$ 精准删掉所有“视觉上为空”的行,前提是关掉 . matches newline,且替换框必须为空。
为什么 ^\s*$ 是唯一靠谱的写法
它匹配的是「从行首到行尾之间只有空白字符(含空格、\t、\r、全角空格 \u3000、不间断空格 \u00a0)或完全为空」的整行。Sublime 的 \s 默认覆盖常见空白类型,不依赖换行符格式,跨平台安全。
-
^$会漏掉带空格或 Tab 的“伪空行”,比如(4个空格)这种行根本不会被匹配 -
\n\n在 Windows(\r\n)文件里基本不生效,且无法处理开头/结尾的单个空行 -
^\s*\n把换行符也当内容吞进去,删完可能让两行代码“粘”在一起 -
^s*$(少反斜杠)是错的,Sublime 直接不识别该正则
操作时三个必踩的坑
失败往往不是正则写错了,而是面板设置或输入法干扰:
- 右下角
.*图标必须点亮(启用正则),但旁边的\n图标一定不能高亮(即禁用. matches newline) - 替换框必须彻底为空——填了
\n或一个空格,等于每删一行反而多塞一个换行,越删越多 - 中文输入法(如搜狗、百度)常劫持
Cmd+H或阻止粘贴,建议切英文输入法后手动敲^\s*$,别复制粘贴
特殊空白字符怎么处理
网页粘贴、微信转发、Excel 导出的内容里,常藏着 \u200b(零宽空格)、\uFEFF(BOM)、\u3000(全角空格)等 \s 不覆盖的字符:
- 把查找内容换成:
^[\s\u200b\uFEFF\u00a0\u3000]*$ - 操作前可先开
View → Show White Space(或Ctrl+Shift+P输入toggle_whitespace),看行首是否显示·或→;如果看到U+200B或EF BB BF,就说明得加进表达式里 - 别指望一次正则通吃所有 Unicode 空白——先确认实际存在哪些,再针对性扩展字符集
删完末尾还剩空行?这不是 bug,是预期行为
^\s*$ 匹配的是“有换行符的行”,而文件末尾若以空行结尾且没有换行符(即 EOF 前是 \n\n 而不是 \n\n\n),最后一行就无法被匹配:
- 补救方法很简单:把光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)删整行 - 这个快捷键会干净删除该行并自动补上换行符,不会让前后两行“焊”在一起
- 别用
Delete或Backspace——它们只删光标前字符,容易留下视觉空行 - 真正容易被忽略的是:删完后文件末尾可能没换行符。如果项目要求 POSIX 兼容(比如 Python 脚本、Shell 配置),记得手动补一个,或运行
Ctrl+Shift+P→Insert Final Newline

















