最可靠方式是运行 code --list-extensions 获取启用插件id列表,加 --show-versions 可显示版本号;手动复制显示名会报错,需确保 code 在 path 中,导出文件用 utf-8 编码;离线安装卡住因默认同步等待且校验签名,应加 --force 并用 timeout 限制单个安装时长。

怎么拿到已安装插件的准确 ID 列表
直接运行 code --list-extensions 是最可靠的方式,它只输出当前启用的插件 ID(如 ms-python.python),不包含禁用项、不依赖 UI 状态。注意:该命令默认不带版本号,加 --show-versions 可以输出 ms-python.python@2026.4.1 这类格式,对跨环境复现更关键。
常见错误是手动截图或从扩展面板复制名称——那得到的是显示名(如 “Python”),不是安装所需的 ID,执行 code --install-extension Python 会报错 Extension 'Python' not found in the marketplace。
- 确保
code命令已加入系统 PATH,否则会提示“command not found” - Windows 用户若用 CMD 而非 PowerShell,重定向符号需用
>,别写成>>导致追加混乱 - 导出文件建议用 UTF-8 编码保存,避免中文插件名(如某些国内定制版)乱码
离线安装时为什么 code --install-extension 会卡住或失败
根本原因是 VSCode 默认逐个安装、同步等待,且不自动处理依赖。网络不可达时,部分插件(如 ms-vscode.cpptools)仍会尝试连接更新服务器校验签名,导致超时卡死。
解决办法是加 --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 设置里关掉“自动检查扩展更新” - 某些插件(如含 native 二进制的
esbenp.prettier-vscode)要求目标机器已装对应 runtime(Node.js 版本需匹配),否则静默失败,日志里只显示Installation completed但插件不生效
能不能直接复制 .vscode/extensions 文件夹迁移
理论上可以,但极不推荐。VSCode 的 extensions 目录下存放的是解压后的运行时文件,不是可移植的安装包;不同平台(Windows/macOS/Linux)、不同 VSCode 主版本(如 1.70 vs 1.85)、甚至不同 CPU 架构(x64 vs arm64)下的二进制模块无法通用。
实测中常见问题包括:
- 复制后启动 VSCode 报错
Cannot find module './extension'(路径硬编码未重置) - 插件图标显示异常、设置页空白,因为
package.json中的activationEvents或contributes没有被重新注册 - 主题类插件(如
be5invis.vscode-custom-css)可能因本地 CSS 路径失效而崩溃
唯一适合直接拷贝的场景:同一台机器重装系统后恢复,且 VSCode 版本完全一致。
哪些插件配置必须手动补全,不能靠 ID 自动还原
插件 ID 只能还原安装动作,但以下内容不会随 code --install-extension 一起恢复:
- 插件专属设置(如 ESLint 的
eslint.packageManager、Prettier 的prettier.tabWidth),得从旧机settings.json里手动提取 - 禁用状态(
extensions.ignoreRecommendations或某插件的disabled字段),code --list-extensions默认不输出禁用项 - 插件绑定的键盘快捷键(如 GitLens 的
gitlens.showQuickPick),存在keybindings.json中,需单独备份 - 某些插件的本地缓存目录(如 Remote-SSH 的
~/.vscode-server)完全独立于 extension 目录,迁移后首次连接仍要下载
最容易被忽略的是插件的“启用范围”:有些插件默认只在特定工作区启用("enablement": "workspace"),单纯安装 ID 后,在用户级设置里看不到开关,必须手动编辑 settings.json 添加对应字段。











