vscode“自动清理代码冗余”无万能方案,需组合使用:codemaid专精c#成员排序与using清理,prettier负责js/ts/html/css格式化与空行压缩,editor.trimtrailingwhitespace清除行尾空格,正则替换精准删连续空行。

VSCode 里所谓“自动清理代码垃圾”,没有一键开关,也没有通用插件能通吃所有语言和场景。它本质是一套组合策略:按语言选工具、按需求配行为、按冲突做隔离。
CodeMaid 只对 C# 等少数语言生效,别指望它管 TypeScript
CodeMaid 的核心功能(如移除未引用的 using、成员排序、空白行压缩)默认只注册在 C#、C++、VB 等语言服务中。你在 .ts 文件里开启 codemaid.language.csharp.runOnSave,它不会报错,也不会干活——直接静默跳过。
- 确认当前文件语言模式右下角显示为
C#(不是Plain Text或TypeScript) - 工作区
settings.json中只启用明确支持的语言:"codemaid.language.csharp.enable": true - 禁用全局
codemaid.runOnSave,否则它会在不支持的语言里空转,还可能干扰其他格式化器 - 若项目含 C# + TS 混合文件,必须关闭
editor.formatOnSave,否则 CodeMaid 和 Prettier 会反复覆盖缩进、括号换行等细节
Prettier requireConfig = true 时,没 .prettierrc 就等于没装
很多人装完 esbenp.pretterr-vscode 发现保存不格式化,第一反应是插件坏了。其实八成是 prettier.requireConfig 设为 true 后,插件直接跳过所有没配置文件的项目——不提示、不报错、不执行。
- 必须在项目根目录放
.prettierrc.json5(推荐 JSON5,支持注释且容错更强) - 本地安装
prettier包:npm install prettier --save-dev --save-exact,否则 CI 和队友机器上行为不一致 - 工作区设置只保留三行:
"prettier.requireConfig": true、"editor.formatOnSave": true、"editor.defaultFormatter": "esbenp.prettier-vscode" - 别在用户级 settings.json 里设
prettier.requireConfig,否则所有没配 .prettierrc 的项目全失效
删空行 ≠ 删所有空行,连续空行才是真冗余
直接搜 ^s*$ 替换为空,等于把函数之间、类定义前后的语义分隔全抹掉。真正该处理的是 ≥2 个连续空行——这是 VSCode 默认“空白行压缩”逻辑的真实意图。
- VSCode 查找替换面板(
Ctrl+H)开启正则(.*按钮)后,用这个表达式最稳:^s*$( | | )s*$( | | )s*$ - 替换字段填:
$1(只保留第一个换行符,跨平台兼容) - 若想保留最多一个空行,就用两次:第一次删 ≥3 连续空行,第二次删 ≥2 连续空行
- 别在
editor.trimTrailingWhitespace开启的同时跑这个正则,否则可能意外吞掉带缩进的空行(比如 JSX 中的换行占位)
Code Runner 运行后自动删 .exe,关键在 postRunCommand 而非 clear
Windows 下用 GCC 编译 C/C++,每次运行都会生成同名 .exe,手动删太打断节奏。Code Runner 的 code-runner.postRunCommand 是唯一可靠出口,但很多人误配成 clear 或 cls,那只是清终端视觉,跟文件无关。
- 在工作区
settings.json中加这一行:"code-runner.postRunCommand": "del /q "${fileDirname}\${fileBasenameNoExtension}.exe" 2>nul"(Windows) - macOS/Linux 改用:
"code-runner.postRunCommand": "rm -f "${fileDirname}/${fileBasenameNoExtension}"" - 确保
code-runner.preserveFocus为false,否则命令可能因焦点不在终端而失败 - 不要试图在
tasks.json里模拟这个逻辑——Code Runner 不走 tasks 流程,配了也无效
真正难的不是写对某条配置,而是理解每个插件的生效边界:CodeMaid 不处理 JS、Prettier 不理 C#、正则替换不区分语义、Code Runner 的 postRunCommand 只在成功运行后触发。越早接受这种“分治”现实,越少掉坑里。











