Extension host崩溃基本是扩展冲突所致,需禁用扩展验证;Prettier与ESLint因争抢格式化控制权而打架,应关闭ESLint格式功能并显式配置语言专属formatter;命令冲突需通过开发者工具和运行扩展排查;禁用无效时须手动删除问题扩展目录。

Extension host terminated unexpectedly 这类错误,基本说明不是配置问题,而是某个扩展在加载阶段就崩溃了——VSCode 的插件冲突从来不是“功能不好用”,而是“抢资源、盖配置、注册同名命令、初始化卡死”。
怎么快速确认是扩展导致的问题?
别猜,直接验证:
• 启动时按住 Shift 键,选择「以无扩展模式继续」;
• 或在已打开的 VSCode 中按 Ctrl+Shift+P,输入并运行 Developer: Reload Window With Extensions Disabled;
• 如果此时编辑器响应正常、保存能格式化、跳转不乱跳,那 100% 是扩展惹的祸。
• 注意:热重载(Reload Window)不够可靠,必须重启或禁用后重新加载窗口,否则状态残留会掩盖真实问题。
为什么 Prettier 和 ESLint 总是打架?
它们不是“不兼容”,而是都在争同一个控制权:onSave 事件和 editor.defaultFormatter 注册点。
常见现象包括:
• 保存后代码被改两次,格式混乱;
• Ctrl+S 卡顿 1–2 秒;
• 输出面板里 ESLint 日志显示 “Cannot register formatter for javascript”;
• 设置了 "editor.defaultFormatter": "esbenp.prettier-vscode",但实际执行的却是 ESLint。
根本原因在于:dbaeumer.vscode-eslint 在启用 "eslint.format.enable": true 时,会主动向 VSCode 声明自己支持 javascript 和 typescript 格式化——哪怕你没让它干这事。
解决方法:
• 关闭 ESLint 的格式能力:"eslint.format.enable": false;
• 显式锁定语言专属 formatter:
"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" };• 禁用
editor.formatOnSave,改用 editor.codeActionsOnSave 配合 "source.fixAll.eslint",让 ESLint 只做修复,不做格式。
命令冲突:“Command 'xxx' not found” 怎么查?
这不是插件“没装好”,而是两个插件都试图注册同一个命令 ID,比如 extension.toggleTerminal 或 markdown.previewToHTML,后加载的那个直接静默失败。
典型表现:
• 快捷键失效(Ctrl+Shift+V 粘贴预览不弹出);
• 右键菜单少了一项;
• 命令面板搜不到某功能。
排查路径:
• 打开开发者工具:Help → Toggle Developer Tools,切换到 Console 标签页,过滤关键词 register command 或 not found;
• 运行 Developer: Show Running Extensions,看哪些插件状态是 “activated but not ready” 或加载耗时 >1s;
• 查看插件 package.json 中的 contributes.commands 字段(可去 GitHub 上搜该插件仓库),比对重复项;
• 临时用 code --disable-extension ms-python.python 这类命令逐个排除,比 GUI 点击更快。
禁用 ≠ 安全,崩溃插件可能残留影响
VSCode 的「禁用」只是跳过激活逻辑,插件文件仍留在磁盘上。某些低质量插件(尤其是旧版 vscode-icons、beautify 或 fork 的 LSP 实现)会在启动时修改 argv.json 或劫持主进程入口,导致 extension host 反复崩溃。
这时仅靠禁用无效,必须手动清理:
• 关闭 VSCode;
• 删除对应目录:~/.vscode/extensions/author.name-version(macOS/Linux)或 %USERPROFILE%\.vscode\extensions\author.name-version(Windows);
• 不要全删 extensions 文件夹——那会连带清掉你信任的插件配置;
• 重装时优先选官方维护活跃的替代品,比如用 biomejs.biome 替代 prettier + eslint 组合,减少中间层和配置耦合。
Developer: Show Running Extensions 看加载耗时,再结合 code --disable-extension 精准剔除。









