必须用code --list-extensions导出插件id列表,因扩展市场显示名(如“python”)非真实安装id(如ms-python.python),直接使用显示名安装会报错“not found”。

能离线迁移,但必须分两步走:插件靠 code --list-extensions + .vsix 批量安装,快捷键靠手动复制 keybindings.json —— 二者机制完全不同,混用会失败。
导出插件列表时为什么不能截图或复制显示名
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 二进制模块不匹配而静默失败(日志只显示 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 },但需提前在 VSCode 设置中关闭extensions.autoCheckUpdates - 注意:含 native 代码的插件(如
ms-vscode.cpptools、esbenp.prettier-vscode)要求目标机 Node.js 版本匹配 VSCode 内置版本,否则无法加载
快捷键配置不能靠 Settings Sync 或插件列表同步
Settings Sync(GitHub Gist 方案)依赖网络,且部分自定义键位在离线场景下不会被完整拉取;而插件列表导出命令 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 - 直接复制该文件到新电脑对应路径即可生效,无需重启 VSCode(热重载)
- 若原配置含平台敏感键(如
ctrlvscmd),建议用when条件表达式做适配,例如:"when": "editorTextFocus && !isMac"
最易被忽略的一点:插件 ID 列表和 keybindings.json 必须分别处理,且前者必须用 --show-versions 保证跨环境复现一致性——没有版本号的 code --list-extensions 输出,在 VSCode 1.85 和 1.90 上可能装出行为不一致的插件。











