唯一可靠方式是运行code --list-extensions,它输出纯文本、每行一个publisher.name格式的真实id(如ms-python.python),仅包含用户级已启用插件,不含禁用项、不带版本号、无bom,跨平台可重定向保存。

怎么拿到当前环境所有已启用插件的准确 ID 列表
直接运行 code --list-extensions --show-versions 是唯一可靠方式。它输出的是形如 ms-python.python@2026.4.1 的完整 ID+版本串,不是你在扩展面板里看到的“Python”这种显示名——后者用在 code --install-extension 里会报错 Extension 'Python' not found in the marketplace。
注意三点:
-
code命令必须在系统 PATH 中,Windows 用户若用 CMD,重定向符号写>而非>>,否则文件内容会混乱追加 - 导出时保存为 UTF-8 编码,避免中文插件名(如某些国产定制插件)乱码
- 该命令默认只列启用状态的插件,禁用项不会出现,省去手动筛选
如何批量下载这些插件的 .vsix 文件
VSCode 官方市场不提供一键下载全部插件的功能,但你可以用脚本驱动浏览器或调用 API 批量获取。最稳的离线方案是:先用 code --list-extensions --show-versions 导出列表,再逐个拼 URL 下载。
每个插件的 .vsix 下载地址格式固定:https://marketplace.visualstudio.com/_apis/public/gallery/publishers/{publisher}/vsextensions/{extension-name}/{version}/vspackage。例如 ms-python.python@2026.4.1 对应的 publisher 是 ms-python,extension-name 是 python,version 是 2026.4.1。
实操建议:
- 用 Python 或 Bash 写个简单解析脚本,把
extensions.txt里的每一行拆成三段,拼 URL 后用wget或curl下载 - 遇到 404(比如作者没发 release、或用了私有 registry),跳过并记录日志,别卡住整个流程
- 下载完统一检查文件头:每个 .vsix 实际是 ZIP,可用
file *.vsix确认是否为 ZIP archive,避免空文件
离线安装时为什么总卡住或静默失败
根本原因是 VSCode 默认安装逻辑会尝试联网校验签名、检查更新、拉取依赖,网络不通时就 hang 住或跳过加载——尤其含 native 二进制的插件(如 ms-vscode.cpptools 或 esbenp.prettier-vscode)。
必须加 --force 参数,并控制超时:
- Linux/macOS:用
while read ext; do timeout 120 code --install-extension "$ext" --force; done - Windows PowerShell:用
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ --force },但务必提前在 VSCode 设置里关掉extensions.autoCheckUpdates - 某些插件依赖特定 Node.js 版本(VSCode 内置 runtime),目标机器 VSCode 主版本差异过大(如源环境是 1.85,目标是 1.70)会导致静默失效,
Output > Extensions面板里可能只显示Installation completed,但插件不注册
能不能直接复制 .vscode/extensions 文件夹迁移
不能。该目录下存放的是解压后的运行时文件,不是可移植包。不同平台(Windows/macOS/Linux)、不同 CPU 架构(x64/arm64)、甚至 VSCode 小版本升级(如 1.84 → 1.85)都可能导致二进制模块不兼容。
更隐蔽的问题是:插件里带 Webview 或本地 server 的,其缓存路径、临时 socket 文件位置硬编码在扩展目录内,直接复制过去可能启动失败,且无明确报错。
真正能跨环境复现的,只有两样东西:.vsix 文件本身 + extensions.txt 列表。前者是原子安装单元,后者是版本锚点——漏掉任一,同事装完发现功能不对,你得花半小时排查是不是少了某个依赖插件。











