vscode自带查找替换可批量删除空行,需用正则^\s*$\n匹配整行(含换行符)并替换为空;仅用^\s*$会残留换行符导致空行仍在,^\n则几乎不匹配,操作前须启用正则模式、预览匹配结果并注意换行符与编码差异。

VSCode 自带查找替换就能批量清理文本,不需要装插件、不依赖外部工具,但正则写错或忽略编码/换行符差异,会导致删错内容或漏删。
用 ^\s*$\n 安全删除所有空行
这是最常用也最容易出错的操作。空行在文件里本质是“纯空白字符 + 换行符”,所以必须把 \n 显式包含在匹配中,否则替换后视觉上还是空行。
-
^\s*$\n✅ 正确:匹配整行(含换行符),替换为空后真·消失 -
^\s*$❌ 错误:只清空内容,换行符还在,空行照旧 -
^\n❌ 错误:几乎不匹配任何空行,因为换行符在行尾,不在行首 - 文件末尾多个空行会被逐个删掉;若想“最多保留一个结尾空行”,可额外查
\n{3,}(LF)或(\r\n){3,}(CRLF),替换成\n\n
用 ^\s*(?:\/\/.*|\/\*[\s\S]*?\*\/|\#.*)?$\n? 一键删注释和空行
这个正则覆盖三类常见注释:// 单行、/* */ 块注释(非贪婪)、# 开头(Python/Shell),同时兼容纯空行。但它是文本级处理,不解析语法。
- 不识别字符串里的伪注释,比如
console.log("// not a comment")也会被删 -
[\s\S]*?是关键:让.能跨行匹配块注释,VSCode 默认.不匹配换行符 - 如果文件混用 CRLF 和 LF,建议先统一换行符(右下角点击 LF/CRLF 切换)
- UTF-8 with BOM 的文件开头有
\uFEFF,\s不包含它,可能导致首行注释漏匹配;预览时重点看第一行
删左侧/右侧内容别靠 Ctrl+Backspace,用 Ctrl+Shift+Home + Delete
Ctrl+Backspace 在 VSCode 默认未绑定,即使手动配了 editor.action.deleteWordLeft,它的“单词”判断也极不可靠——驼峰名、中文变量、正则字面量都可能切错位置。
-
Ctrl+Shift+Home选中光标到行首 →Delete:精准、稳定、无视语言模式 - 同理,
Ctrl+Shift+End+Delete清右侧(不含换行符) - 若想删整行但保留换行符(避免影响日志行号对齐),用
Shift+End+Delete更安全 - Vim 或其他插件常劫持
Ctrl+Backspace,查keybindings.json时搜"key":"ctrl+backspace"就能定位冲突
批量操作前必须点 “Preview” 看匹配结果
VSCode 的全局替换(Ctrl+Shift+H)不会自动识别文件编码或换行符差异,直接点 “Replace All” 容易误伤。
- 先用
Ctrl+Shift+F全局搜索,打开预览面板,确认所有高亮项都符合预期 - 特别检查:文件开头(BOM)、空行前后、注释嵌套边缘、JSON 或正则字面量内部
- 混合编码项目(如部分文件是 GBK)会完全不匹配,需提前转 UTF-8
- 多光标删行(
Ctrl+Shift+K)不进撤销栈合并组,连续删 10 行得按 10 次Ctrl+Z才能回退,不如先Ctrl+S保存副本
真正麻烦的从来不是正则怎么写,而是你没看清右下角显示的是 LF 还是 CRLF、没注意到当前焦点在终端而不是编辑器、或者忘了那个 .vscode/settings.json 里早有一条覆盖了默认行为的 editor.wordSeparators 配置。











