最可靠方式是用code --list-extensions --show-versions导出带版本号的真实插件ID(如ms-python.python@2026.4.1),再用code --install-extension --force批量离线安装;手动复制显示名、拖拽.vscode/extensions目录或双击vsix均会因ID不匹配、二进制不兼容或版本错配而失败。

离线迁移插件最可靠的方式,是用 code --list-extensions --show-versions 导出真实插件 ID 列表,再用 code --install-extension 配合 --force 批量安装——手动复制显示名、拖拽 .vscode/extensions 文件夹、或直接双击 vsix 安装多个插件,都会在跨环境时失败。
为什么不能复制扩展面板里看到的“Python”“Prettier”这些名字
VSCode 插件市场显示名和实际安装 ID 完全不同。比如“Python”插件的真实 ID 是 ms-python.python,而“Prettier”对应的是 esbenp.prettier-vscode。用显示名执行 code --install-extension Python 会报错:Extension 'Python' not found in the marketplace。
常见错误包括:
- 截图或手动抄写扩展面板里的中文/英文名称
- 从 Marketplace 页面复制标题文字(如 “GitLens — Git supercharged”)
- 导出时没加
--show-versions,导致重装后版本不一致,引发兼容问题
正确做法:在旧电脑终端中运行
code --list-extensions --show-versions > extensions.txt
确保终端使用 PowerShell(Windows)或 bash/zsh(macOS/Linux),且 code 命令已加入 PATH;文件保存为 UTF-8 编码,避免含中文 ID 的插件(如某些国产定制插件)乱码。
离线安装时 code --install-extension 卡住或静默失败
根本原因是 VSCode 默认行为包含联网校验签名、检查更新、等待依赖就绪。内网断网时,它会在后台卡住几十秒甚至更久,最后只输出 Installation completed,但插件根本没生效。
必须加参数规避:
-
--force:跳过“已存在”提示,防止重复安装冲突 -
timeout 120(Linux/macOS)或等效超时控制(PowerShell 中需额外封装):防死锁 - 提前关闭 VSCode 设置中的
extensions.autoCheckUpdates
示例(Linux/macOS):
while read ext; do timeout 120 code --install-extension "$ext" --force; done < extensions.txt
PowerShell 示例:
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ --force }
注意:含 native 二进制模块的插件(如 ms-vscode.cpptools、esbenp.prettier-vscode)要求目标机 Node.js 版本与 VSCode 内置版本匹配,否则会静默加载失败。
能不能直接拷贝 .vscode/extensions 目录批量迁移
理论上可以,但极不推荐。该目录下存放的是解压后的运行时文件,不是可移植安装包,受三重限制:
- 操作系统差异:Windows 下的
.dll在 Linux/macOS 上无法加载 - VSCode 主版本差异:1.70 和 1.85 对插件 API 兼容性不同,可能触发激活失败
- CPU 架构差异:x64 插件无法在 arm64 机器上运行(如 M1/M2 Mac 或 Windows on ARM)
如果硬要这么做,还必须手动修改 .vscode/extensions/extensions.json 中所有路径字段为当前机器路径,否则 VSCode 启动时会忽略整个目录。这不是迁移,是修 bug。
真正需要离线复现完整开发环境时,插件只是其中一环;快捷键靠复制 keybindings.json,代码片段靠同步 .snippets 目录,远程开发支持(如 Remote-SSH)则需额外处理 vscode-server 二进制包——这些都不能靠“复制文件夹”一招通吃。


















