正确批量安装插件需用code --install-extension命令配合extensions.txt中的插件ID列表,该文件为纯文本格式,每行一个如ms-python.python的ID,不可拖入扩展面板安装;离线环境则必须使用预先下载的.vsix文件并通过命令行批量安装。

能批量安装,但不能靠“拖文件进扩展面板”实现——extensions.txt不是安装包,拖进去必报 Invalid VSIX package 或静默失败。
用 code --install-extension 配合文本列表才是正解
VSCode 的命令行工具 code 支持逐个安装插件 ID,而 extensions.txt 只是纯文本 ID 列表(每行一个,如 ms-python.python),它本身不可执行、不带逻辑、也不含版本或签名信息。
- 导出当前已启用插件:
code --list-extensions > extensions.txt - Linux/macOS 批量安装:
cat extensions.txt | xargs -I {} code --install-extension {} --force - Windows PowerShell 批量安装:
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ --force } -
--force参数可跳过“已安装”提示,避免脚本中断;去掉它则会暂停并等待确认 - 插件 ID 大小写敏感,且必须含 publisher.id 格式(例如
esbenp.prettier-vscode,不能只写prettier)
离线环境必须用 .vsix 文件,不能靠 ID 在线拉取
当目标机器完全断网时,code --install-extension ms-python.python 会失败——它默认尝试从 Marketplace 下载最新版,不查本地缓存。
- 提前在有网机器上下载对应
.vsix:访问https://marketplace.visualstudio.com/items?itemName=ms-python.python→ 滚动到底部 → 点Download Extension - 注意 URL 中的版本号(如
/2024.6.0/vspackage),改后缀为.vsix后再下载 - 所有
.vsix放同一目录,执行:for ext in *.vsix; do code --install-extension "$ext" --force; done(bash)
PowerShell:Get-ChildItem *.vsix | ForEach-Object { code --install-extension $_.FullName --force } - 若遇签名验证失败(常见于企业定制镜像),可临时加
--disable-extension-corruption-check,但生产环境禁用
别信“扩展包 = 自动同步所有依赖”的说法
扩展包(Extension Pack)如 ms-python.python-extension-pack 确实能一键安装多个插件,但它只声明依赖关系,不锁定版本,也不保证兼容性。
- 安装后,每个子插件仍会按自己规则自动更新,可能造成某天突然失效(比如 Pylance 升级后与旧版 Python 扩展冲突)
- 扩展包 ID 不等于插件 ID 列表:它本身是个独立扩展,安装后只会触发所列插件的“当前最新版”安装,不会还原你原来用的 v2023.x
- 想精确复现环境?必须导出
code --list-extensions --show-versions并人工过滤 [disabled] 行,再配合.vsix归档
真正容易被忽略的是:插件启用状态、workspace 级禁用、设置同步开关这三项,code --list-extensions 全都不记录。导出 ID 列表只是第一步,还原完整行为还得靠人肉核对 settings.json 和工作区配置。


















