vscode自带正则可批量清理换行,关键要区分删空行、压连续空行或抹平所有换行:删空行用^s* ? (兼容bom和crlf),压连续空行为单个用(\r?\n)\s*(\r?\n)+→$1$2,抹平所有换行用\r?\n→空格或空;须启用多行模式、统一换行符并预览验证。

VSCode 自带正则替换就能批量清理换行,不需要插件或外部工具;关键不是“删换行符”,而是明确你要的是“删空行”“压连续空行”还是“抹平所有换行变成一行”——三者正则不同、效果迥异,混用会破坏结构。
怎么写正则才能真正删掉空行(含空格和制表符)
空行的本质是「只有空白字符 + 换行符」,只匹配内容不匹配换行符,替换后视觉上还是空行。必须把换行符一起覆盖掉。
- 对 LF(Unix/macOS/Linux)文件:用
^s*$—— 匹配整行(含结尾换行),替换留空 - 对混合换行符(尤其 Windows 的 CRLF):改用
^s* ?,?兼容回车可选 - 如果文件开头有 BOM(
uFEFF),^s*不会匹配它,第一行空行可能漏删;可临时改用^uFEFF?s* ? - 别用
^:它只匹配“行首就是换行符”的位置,实际几乎不命中任何空行
如何压缩连续空行为单个空行(保留可读性)
全删空行会让函数/段落紧贴,反而难读。更合理的是把 2 行以上空行压成 1 行。
- 查找:
( ? )s*( ? )+—— 捕获第一个换行、中间任意空白、再捕获一个或多个换行 - 替换:
$1$2—— 只保留两个换行符,即视觉上一个空行 - 必须勾选搜索面板右下角的
(启用多行模式),否则^和$不按行生效 - 操作前先统一换行符:Ctrl+Shift+P →
Change End of Line Sequence→ 选LF或CRLF
怎样把多段文本合并成一行(删所有换行)
这属于文本扁平化,常见于日志提取、生成 CSV 片段或准备 SQL 字符串。注意:会彻底破坏代码结构,慎用。
- 查找:
?—— 简单粗暴,匹配所有换行符(含 CRLF) - 替换:
(一个空格)或留空(完全拼接) - 若要保留原换行处的语义分隔,可先替换为
\n字符串:\n,再全局替换成空格 - ⚠️ 避免在源码文件里直接跑这个操作——Python 的 docstring、JSON 的缩进、CSS 的声明块都会崩
为什么预览和编码差异总被忽略
VSCode 的正则引擎对编码和换行符敏感,不检查就批量操作,很容易“看起来删了,其实没删干净”。
- UTF-8 with BOM 文件:BOM 在行首,
^s*不匹配uFEFF,开头空行跳过 - 混合 LF/CRLF 项目:单用
会漏掉 CRLF 中的,建议统一用? - 不可见字符干扰:如
u00A0(不间断空格)、u200B(零宽空格)不被s覆盖,需显式加入正则,例如:^[ u00A0u200B]* ? - 批量处理前务必点
Preview—— 尤其看文件头、末尾和折叠区域附近,那里最容易藏“伪空行”
最麻烦的从来不是正则怎么写,而是你根本不知道那一行到底有没有隐藏字符。光标停在疑似空行开头,按 Ctrl+Shift+P → Developer: Toggle Developer Tools,在 Console 里执行 document.activeElement.value.split('
')[lineNumber] 才算真正看见它。











