Ctrl+H手动删空行不靠谱,因直接替换\n\n会误删合理空行及文件末尾换行,导致Git diff异常;正则写错(如^\s*$未开正则模式)则无效。

为什么 Ctrl+H 手动删空行不靠谱?
直接用查找替换删 \n\n 会误杀函数间合理空行,还可能把文件末尾多个换行全干掉,导致 Git 提交时 diff 异常。更糟的是,正则写错(比如用 ^\s*$ 却没开“正则模式”)根本没效果,看着一堆空行干着急。
真正稳的解法是用 Sublime 自带的命令 + 精确正则:
- 打开查找面板:
Ctrl+H(Windows/Linux)或Cmd+H(macOS) - 勾选
. Regular expression(右下角图标或按Alt+R) - 查找内容填:
^\s*$(\r?\n)+ - 替换为:
\n - 点
Replace All
这个正则只匹配「纯空行(含全空格/tab)+ 后续连续换行」,保留单个换行符,不会破坏代码段落结构。
Remove Empty Lines 插件真能一键搞定?
插件确实存在,但默认行为常踩坑:比如 Remove Empty Lines(by jbrooksuk)会删掉所有空行,包括你特意留的逻辑分隔空行;而 Trailing Spaces 只清行尾空格,对空行完全没反应。
如果你坚持用插件,推荐手动配置 Remove Empty Lines:
- 安装后,菜单栏选
Preferences → Package Settings → Remove Empty Lines → Settings - 在用户设置里加:
"consecutive_empty_lines": 2(意思是:只删连续出现 ≥2 次的空行) - 再绑定快捷键:在
Preferences → Key Bindings加一行:{"keys": ["ctrl+alt+e"], "command": "remove_empty_lines"}
这样按 Ctrl+Alt+E 就只压缩冗余空行,不碰单空行。
保存时自动清理空行?别信“全自动”宣传
Sublime 本身不支持保存钩子(save hook),所谓“保存即清理”的插件(如 AutoSave 配合其他脚本)实际是监听文件变更后触发,容易和格式化插件冲突,甚至造成无限循环——比如 Prettier 格式化完插入空行,插件又删,删完又触发格式化……
务实做法是用 Build System 做轻量预处理:
- 菜单
Tools → Build System → New Build System… - 填入以下内容并保存为
TrimEmptyLines.sublime-build:
{
"shell_cmd": "sed -i '' '/^[[:space:]]*$/d' $file",
"selector": "source"
}
注意:sed -i '' 是 macOS 写法,Linux 去掉中间两个单引号;Windows 用户请改用 PowerShell 脚本,sed 在 Win 默认不可用。
Git 提交前批量处理多个文件?别手动开每个文件
Sublime 不支持项目级正则批处理,硬开几十个标签页操作既慢又易漏。正确路径是终端 + sed 或 awk,绕过编辑器限制:
- 进项目根目录,运行(macOS):
find . -name "*.py" -exec sed -i '' '/^[[:space:]]*$/d' {} \; - Linux 替换为:
find . -name "*.js" -exec sed -i '/^[[:space:]]*$/d' {} \; - 想保留单空行?用这个更安全的 awk:
awk 'NF {print; if (prev) print \"\"; prev=1; next} {prev=0}' file > tmp && mv tmp file
关键是别依赖 Sublime 处理工程级任务——它是个编辑器,不是构建工具。空行清理本质是文本清洗,交给 shell 更稳、更可控。

















