唯一真正有效的临时禁用所有插件的方式是code --disable-extensions,它从启动阶段彻底跳过所有扩展加载(含语言服务器和后台监听器),且参数必须置于命令末尾、不可与--extensions-dir混用,否则被静默忽略。

唯一真正有效的临时禁用所有插件的方式,是命令行启动时加 --disable-extensions 参数。 它不读取任何配置、不加载任何扩展进程,连语言服务器和后台监听器都跳过——这才是排查启动卡死、补全失效、高 CPU 占用的干净起点。
为什么--disable-extensions必须放命令末尾且不能混用--extensions-dir
VS Code 的参数解析逻辑严格:--disable-extensions 是一个全局拦截开关,只有在命令行最后出现时,才能确保它覆盖所有路径或工作区参数。一旦前面有 --extensions-dir(比如 code --extensions-dir /tmp/empty --disable-extensions .),VS Code 会优先尝试从指定目录加载插件,导致该参数被静默忽略。
- Windows 用户右键开始菜单图标 → “以管理员身份运行”再拖入项目,插件照常启动?因为 GUI 启动不走命令行参数控制
- macOS 正确写法:
open -n -b "com.microsoft.VSCode" --args --disable-extensions /path/to/project - Linux 正确写法:
/usr/bin/code --disable-extensions /path/to/project(确认没 alias 覆盖code) - Windows 正确写法:
code --disable-extensions "C:\my project"(路径含空格必须加引号)
extensions.disabledExtensions 配置不是“批量开关”,ID 错一个就静默失效
这个字段写在 settings.json 里,看起来像能批量禁用,但实际限制很多:只对已安装插件生效;未安装的不会被记录;ID 必须完全匹配插件市场 URL 最后一段,比如 esbenp.prettier-vscode,写成 prettier 或 prettier-vscode 都无效,且 VS Code 不报任何错误。
- 常见错误:
"extensions.disabledExtensions": ["prettier"]→ 插件照常运行 - 禁用
ms-python.python后,Python 语言服务器仍可能在后台运行,需手动执行Developer: Reload Window才真正卸载 - 工作区级禁用写在
.vscode/settings.json,但若用户级设置已启用同名插件,优先级可能被覆盖
禁用后还在运行?检查三处残留配置
插件禁用后“复活”,通常不是 VS Code bug,而是以下配置仍在兜底触发隐式加载:
-
editor.defaultFormatter指向已禁用插件的 ID(如"editor.defaultFormatter": "esbenp.prettier-vscode")→ VS Code 会强行拉起它执行格式化 - 插件自身的布尔开关项未关闭,例如
prettier.enable、eslint.enable、gitlens.codeLens.enabled等仍为true - 多根工作区或远程窗口中,设置了
extensions.experimental.affinity或继承了其他层级的启用策略
复杂点在于:禁用 ≠ 卸载 ≠ 不响应。VS Code 的插件生命周期管理很松散,有些插件注册了 onStartupFinished 或 "*" 激活事件,哪怕你点了 Disable,它也可能在后台维持进程。最彻底的验证方式,是打开命令面板运行 Developer: Show Running Extensions,看对应插件是否还出现在 Active 列里。











