--disable-extensions 是唯一真正跳过所有插件加载的方式,它在启动第一步就截断配置读取与 activationEvents 匹配,不加载任何扩展、不触发初始化、不保留后台进程,实现彻底的零扩展环境。

直接用 code --disable-extensions 启动,就能彻底跳过所有插件加载,这是唯一 100% 有效的“跳过检查”方式。 它不读配置、不触发任何 activationEvents、不尝试恢复上次状态——就是干净的零扩展环境。其他所谓“跳过检查”的设置(比如关自动更新、调延迟加载)本质仍是让插件走完初始化流程,只是晚一点或轻一点,不是跳过。
为什么 --disable-extensions 是唯一真跳过
VSCode 的插件加载分三步:读取配置 → 匹配 activationEvents → 执行激活逻辑。而 --disable-extensions 在第一步就截断了整个流程——它连 settings.json 里的 extensions.autoUpdate 或 extensions.experimental.affinity 都不读。你看到的“启动快”,是因为根本没给插件留执行机会。
- 它必须放在命令末尾:
code --disable-extensions /path/to/project,否则可能被忽略 - 不能和
--extensions-dir同时用,后者会被直接丢弃 - macOS 上用
open -n -b "com.microsoft.VSCode" --args --disable-extensions才能真正生效,仅靠 Dock 图标右键“选项”无效
--disable-extension <id></id> 适合逐个排查
当你已经怀疑某个插件是元凶(比如 eamodio.gitlens 或 ms-python.python),用这个参数单禁比全局禁更精准。它只屏蔽指定 ID,其余插件照常加载,方便做对比测试。
- ID 必须完整准确,例如
esbenp.prettier-vscode,少一个点或大小写错都不行 - 可在插件市场页 URL 里找:
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode→esbenp.prettier-vscode就是 ID - 多个插件要禁用?得重复写多次:
code --disable-extension eamodio.gitlens --disable-extension ms-python.python
别信“延迟加载”“按需激活”能跳过检查
像 extensions.experimental.affinity 或声明 "onLanguage:typescript" 的插件,只是把激活时机从“一开就干”推迟到“你打开第一个 .ts 文件时才干”。但 VSCode 启动时仍会扫描、解析、注册这些插件——它依然在内存里占着位置,也依然贡献 Start Delay。Developer: Startup Performance 里看到的毫秒数,就是它们“准备干活”花的时间。
- 所谓“懒加载”不等于“不加载”,只是加载后不立刻执行主逻辑
- 某些插件(如旧版
ms-vscode.js-debug)即使没开调试面板,也会预启调试服务进程 - 如果你的目标是“启动瞬间完成”,那只有
--disable-extensions满足条件;其他都是妥协方案
真正容易被忽略的是:禁用插件后不退出 Code Helper 进程,旧插件线程可能还在后台跑。macOS 上 Cmd+Q、Windows/Linux 关掉所有窗口并确认任务管理器里没残留 Code Helper,否则你以为跳过了,其实没跳过。











