最稳删空行需启用多行模式并用 ^\s(?=\r?\n) 匹配后换行的空白行,避免误删;归并空行用 (\r?\n)\s(\r?\n)+ 替换为 $1$2;注意 unicode 空格和换行符混用问题。

VSCode 里删空行最稳的方式是用正则替换,但直接搜 ^\s*$ 并替换为空容易误伤含空白符的“伪空行”,得加标志和边界控制。
为什么 ^\s*$ 替换后有时删不干净或删多了
默认情况下,VSCode 的正则搜索不启用多行模式(m 标志),^ 和 $ 只匹配整个文本首尾,不是每行起止;另外 \s 会匹配换行符本身(尤其在 Windows 下 CRLF 混用时),导致替换吞掉不该吞的换行。
- 确保勾选搜索面板右下角的
.*(启用正则)和\n(启用多行模式,即m标志) - 更安全的写法是用
^\s*(?=\r?\n)—— 只匹配「以零或多个空白字符开头、后面紧跟着换行符」的行 - 避免用
$结尾,因为不同系统换行符不同(\n/\r\n),(?=\r?\n)更可靠
实际操作:三步删净空行(含全空白行)
打开搜索面板(Ctrl+H / Cmd+H),按以下填入:
-
查找:
^\s*(?=\r?\n) - 替换: 留空(什么也不填)
-
启用:
.*(正则)、\n(多行模式)
点 全部替换。它会精准跳过最后一行(即使为空)——因为最后一行后面没有 \r?\n,不会被匹配,这是预期行为。
想保留一个空行做段落分隔?用这个正则
如果代码/文档需要“压缩多个空行为单个空行”,就不能全删,而要归并。这时用:
-
查找:
(\r?\n)\s*(\r?\n)+ -
替换:
$1$2(即保留第一个换行 + 第二个换行,中间所有空白和多余换行全丢) - 同样必须启用
.*和\n
注意:$1 和 $2 是捕获组,VSCode 支持这种引用;如果文件混用 CRLF 和 LF,建议先统一换行符(Ctrl+Shift+P → Change End of Line Sequence)再操作。
别忽略:大文件慎用“全部替换”,优先试 替换 单步确认
正则在超长文件(如 >5MB 日志)中可能卡顿或漏匹配,VSCode 的搜索引擎对嵌套空白和 Unicode 空格(如 \u00A0)支持有限。
- 若发现没删掉某些“看起来空”的行,把光标停在那行开头,按
Ctrl+Shift+P→Developer: Toggle Developer Tools,在 Console 里执行document.activeElement.value.split('\n')[lineNumber].length看真实字符数 - 常见干扰字符:
\u00A0(不间断空格)、\u200B(零宽空格),需扩展正则为^[ \t\u00A0\u200B]*(?=\r?\n)
真正难处理的从来不是“怎么写正则”,而是你不知道那一行到底是不是真的“空”。











