Sublime Text中如何使用正则表达式批量移除文件多余空白行?
- 内容介绍
- 文章标签
- 相关推荐
本文共计919个文字,预计阅读时间需要4分钟。
直接说结论:
为什么 ^\s*$ 是最稳的写法
它匹配的是「从行首开始、中间全是空白字符(含空格、\t、\r、不可见 Unicode 空格)、到行尾结束」的整行。Sublime 的 \s 默认覆盖常见空白,不依赖换行符类型,也不需要开启跨行匹配。
-
^$只匹配真正什么都没有的行——只要末尾有空格或 Tab,就完全漏掉 -
^\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)删整行 - 如果该空行前后都是代码,
Ctrl+Shift+K会干净删除整行并自动补上换行符,不会让两行“焊”在一起 - 别用
Delete或Backspace—— 它们只删光标前字符,容易留下视觉空行
处理混合空白或特殊字符时得加料
普通 \s 不匹配全角空格(\u3000)、不间断空格(\u00a0)、零宽空格(\u200b)或 BOM(\ufeff)。粘贴自网页或中文文档时,这些字符常藏在“空行”里。
- 想一并清理,查找框改用:
^[\s\u200b\uFEFF\u00a0\u3000]*$ - 先开
View → Show White Space(或Ctrl+Shift+P输入toggle_whitespace),让空格、Tab、换行符显形,确认是否真有隐形字符 - 如果看到行首有
·(空格)或→(Tab),说明^\s*$仍能匹配;如果看到U+200B或BOM,就得加进表达式里
真正容易被忽略的是:替换前务必按 Ctrl+A 全选——Sublime 的正则替换默认作用于全文,但如果当前有任意选区,它只会替换选区内匹配项。删空行这种操作,99% 需要全文生效。
本文共计919个文字,预计阅读时间需要4分钟。
直接说结论:
为什么 ^\s*$ 是最稳的写法
它匹配的是「从行首开始、中间全是空白字符(含空格、\t、\r、不可见 Unicode 空格)、到行尾结束」的整行。Sublime 的 \s 默认覆盖常见空白,不依赖换行符类型,也不需要开启跨行匹配。
-
^$只匹配真正什么都没有的行——只要末尾有空格或 Tab,就完全漏掉 -
^\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)删整行 - 如果该空行前后都是代码,
Ctrl+Shift+K会干净删除整行并自动补上换行符,不会让两行“焊”在一起 - 别用
Delete或Backspace—— 它们只删光标前字符,容易留下视觉空行
处理混合空白或特殊字符时得加料
普通 \s 不匹配全角空格(\u3000)、不间断空格(\u00a0)、零宽空格(\u200b)或 BOM(\ufeff)。粘贴自网页或中文文档时,这些字符常藏在“空行”里。
- 想一并清理,查找框改用:
^[\s\u200b\uFEFF\u00a0\u3000]*$ - 先开
View → Show White Space(或Ctrl+Shift+P输入toggle_whitespace),让空格、Tab、换行符显形,确认是否真有隐形字符 - 如果看到行首有
·(空格)或→(Tab),说明^\s*$仍能匹配;如果看到U+200B或BOM,就得加进表达式里
真正容易被忽略的是:替换前务必按 Ctrl+A 全选——Sublime 的正则替换默认作用于全文,但如果当前有任意选区,它只会替换选区内匹配项。删空行这种操作,99% 需要全文生效。

