最稳的删除空行方法是用正则 ^\s*$ 替换为空,它匹配行首到行尾仅有空白字符的行,覆盖缩进空行;勿用 ^$ 或 \n\n,后者无法处理伪空行且受换行符和编码影响。

用 ^\s*$ 匹配并删除空行
Sublime Text 删除空行最稳的方式是正则替换,核心在于写对匹配模式。^\s*$ 表示“行首到行尾之间只有零个或多个空白字符(含空格、制表符、不可见 Unicode 空白)”,能覆盖你肉眼看着“空”但其实有缩进的行。
操作步骤:
- 按
Ctrl+H(Windows/Linux)或Cmd+H(macOS)打开替换面板 - 勾选
.*按钮启用正则模式 - 查找框填
^\s*$ - 替换框留空
- 点
Replace All
注意:别用 ^$ —— 它只匹配真正什么都没有的行,遇到带空格或 tab 的“伪空行”就漏掉。
为什么不能用 \n\n 连续换行替换
有人想用 \n\n 替换成 \n 来“压缩空行”,这会导致两处问题:
- 开头或结尾的空行会被忽略(
\n\n至少需要两个连续换行,单个空行不匹配) - 多于两个空行时,一次替换只能消掉一个,得反复点多次,且容易误删段落间距
更麻烦的是,Windows 和 macOS/Linux 换行符不同(\r\n vs \n),\n\n 在 Windows 文件里可能根本匹配不上。而 ^\s*$ 是按行匹配,完全不受换行符类型影响。
批量处理前先确认是否含 BOM 或编码异常
如果替换后发现某些“空行”死活删不掉,大概率是文件含 BOM 或用了非 UTF-8 编码。Sublime 有时会把 BOM 后的不可见字符(如 \uFEFF)当内容,导致 ^\s*$ 不匹配。
- 看右下角状态栏,确认编码显示为
UTF-8,不是UTF-8 with BOM或Western (Windows 1252) - 若显示带 BOM,菜单选
File → Reopen with Encoding → UTF-8,再试替换 - 极少数情况存在零宽空格(
\u200B)等隐形字符,可用^\s*\u200B*\s*$临时补救,但建议先查源头
保存后记得检查 Git 差异或编辑器自动格式化干扰
删完空行看似干净,但有些项目启用了 Prettier、ESLint 或 EditorConfig,保存时可能自动加回空行(比如函数间强制空一行)。这不是 Sublime 的问题,而是格式化工具在“纠正”你。
- 删完先别急着保存,用
Ctrl+Shift+P调出命令面板,搜Set Syntax: Plain Text临时切到纯文本模式再替换,避开语法高亮插件干扰 - 检查项目根目录是否有
.prettierrc或.editorconfig,确认blankLineBeforeBody类配置项 - Git 提交前用
git diff --ignore-all-space看是否真有内容变更,还是只动了空白
空行这事,表面是删几行,背后常连着编码、编辑器配置、协作规范三层水。动手前扫一眼右下角编码和格式化开关,省得白忙活。










