
用 ^\s*$ 正则一键删空行
Sublime 里删空行最稳的方式就是「查找 → 查找」(Ctrl+F / Cmd+F),勾上 .* 按钮启用正则,输入 ^\s*$,再点 Find All,然后按 Delete 或 Ctrl+Shift+K(删整行)。
注意:^\s*$ 匹配的是「从行首到行尾只有空白字符(含制表符、空格、不可见 Unicode 空格)的行」,比单纯写 ^$ 更安全——后者会漏掉带空格的“伪空行”。
-
^\s*$能匹配(全角空格)、\u200b(零宽空格)等常见隐形空行,但默认不匹配换行符本身(这是正常的,因为每行天然以\n结尾) - 如果文件用了
\r\n(Windows 换行),^\s*$依然有效;Sublime 的正则引擎自动适配换行符类型 - 别用
^[\s\S]*$或^.*$——它们会选中所有行,一删全没
Ctrl+Shift+K 是删行快捷键,不是删选中内容
很多人按了 Delete 发现只删了光标前一个字符,是因为没理解 Sublime 的“行操作逻辑”:只要光标在某行任意位置(哪怕选中了文字),Ctrl+Shift+K 就会删除该整行,并自动补上换行符,不会留出错位空行。
- 批量删空行时,先
Find All选中所有匹配行 → 光标会跳到每个匹配行首 → 此时按Ctrl+Shift+K,每行被干净删除 - 如果误用了
Delete或Backspace,可能只删掉空格却留下换行符,反而制造更多“视觉空行” - Mac 用户注意:
Cmd+Shift+K功能相同,别和Cmd+K(折叠代码)混淆
处理混合缩进/不可见字符时,先开「显示空格」
有些“空行”看着空,其实是缩进残留或 BOM、ZWSP 等不可见字符导致的,直接正则可能漏掉。先打开 View → Show White Space(或按 Ctrl+Shift+P 输入 toggle_whitespace),让空格、制表符、换行符显形。
- 看到行首有
·(空格)或→(制表符)?说明不是真空行,^\s*$仍能匹配它 - 看到行尾有
¶?那是换行符标记,不用管,它不属于行内容 - 如果某行显示
U+200B或BOM,需手动删掉——正则^\s*$默认不匹配这些,得加\u200b|\uFEFF到表达式里(如^[\s\u200b\uFEFF]*$)
批量处理多个文件时,别依赖「全部替换」弹窗
想对整个项目删空行?别在「Replace All in Files」对话框里直接输 ^\s*$ → 空替换内容 → 点全部替换。Sublime 会把所有匹配行替换成空字符串,但**不删除换行符**,结果是把空行变成“长度为 0 的行”,界面看起来还是空的,实际文件体积没变,且后续正则可能继续命中它。
- 正确做法:用
Find in Files找出所有含空行的文件 → 手动逐个打开 → 用^\s*$+Ctrl+Shift+K处理 - 如果必须自动化,改用命令行工具更可靠,比如
sed '/^[[:space:]]*$/d' file(Linux/macOS)或 PowerShell 的(Get-Content f) -notmatch '^\s*$' | Set-Content f - 插件如
TrailingSpaces可设保存时自动清理,但它默认不管空行,得额外配置
真正麻烦的不是怎么删,而是删完发现某些“空行”其实是模板占位符或 YAML 块缩进必需的分隔行——动手前先确认业务逻辑是否允许删。










