code --list-extensions是唯一可靠起点,因其直接输出启用插件的真实id(如ms-python.python)而非市场显示名,避免安装报错;导出需加--show-versions并保存为utf-8编码,离线安装须用--force和timeout防卡死,快捷键只能复制keybindings.json文件。

离线迁移 VSCode 插件和配置,不能靠截图、复制市场名或直接拷贝 .vscode/extensions 文件夹——这三类操作在跨平台、换系统、升 VSCode 版本时几乎必失败。
为什么 code --list-extensions 是唯一可靠起点
VSCode 扩展市场里显示的 “Python”“Prettier” 只是展示名,真实安装 ID 是 ms-python.python、esbenp.prettier-vscode。用展示名执行 code --install-extension Python 会报错:Extension 'Python' not found in the marketplace。
- 必须在旧电脑终端运行:
code --list-extensions --show-versions > extensions.txt,生成带版本号的 ID 列表 - Windows 用户若用 CMD,请确认
code已加入 PATH;PowerShell 更稳,避免重定向写成>>导致文件追加混乱 - 文件必须保存为 UTF-8 编码,否则含中文插件名(如某些国产定制插件)会乱码
code --install-extension 离线安装卡住或静默失败的真实原因
默认行为会联网校验签名、检查更新。网络不通时,命令常卡在等待状态;更隐蔽的是:含 native 二进制模块的插件(如 ms-vscode.cpptools、esbenp.prettier-vscode)要求目标机 Node.js 版本匹配 VSCode 内置版本,否则日志显示 Installation completed,但插件根本不加载。
- 必须加
--force跳过“已存在”提示,避免重复安装冲突 - Linux/macOS 推荐加
timeout 120控制单个安装时长:while read ext; do timeout 120 code --install-extension "$ext" --force; done - Windows PowerShell 可用:
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ --force },但需提前关闭extensions.autoCheckUpdates - 安装后务必重启 VSCode —— 语言服务器类插件不重启不会激活
快捷键配置只能从 keybindings.json 复制
Settings Sync 或插件列表导出命令 code --list-extensions 根本不涉及快捷键。同步快捷键唯一可靠来源是 keybindings.json 文件本身,路径如下:
- Windows:
%APPDATA%\Code\User\keybindings.json - macOS:
~/Library/Application Support/Code/User/keybindings.json - Linux:
~/.config/Code/User/keybindings.json
注意:该文件是纯 JSON,不要手动编辑结构;若已有自定义快捷键,直接覆盖即可生效,无需重启。
别碰 .vscode/extensions 文件夹直拷贝
不同平台、VSCode 主版本、CPU 架构下,插件内 native 模块(如 C++ 编译产物)不通用。实测常见报错:Cannot find module './extension' 或启动时报 Module did not self-register。
即使同平台,VSCode 升级后也可能因 API 变更导致扩展无法加载。离线迁移必须走 ID 导出 → 下载 .vsix → code --install-extension 安装流程,跳过任何“捷径”。











