最可靠方法是用code --list-extensions > extensions.txt导出纯文本id清单,再用code --install-extension批量重装;手动复制extensions目录易因版本不兼容、本地模块缺失或权限问题失败。

直接用 code --list-extensions 导出插件清单最可靠
手动复制 %USERPROFILE%\.vscode\extensions 目录看似简单,但极易失败:目标机 VSCode 版本不兼容、插件含本地编译模块(如 ms-python.python 的 pylsp)、Windows 权限拦截都会导致启动报错或功能缺失。而 code --list-extensions 输出的是纯文本 ID 列表,与版本无关,且可被 code --install-extension 精确复用。
操作建议:
- 在旧机 VSCode 终端中执行
code --list-extensions > extensions.txt,确保 VSCode 已加入系统 PATH - 检查
extensions.txt内容是否含空行或注释——这些会导致--install-extension报错Extension 'xxx' not found - 若需排除某插件(如仅用于旧项目的
ms-dotnettools.csharp),直接删掉对应行即可,比手动卸载更干净
迁移用户设置必须分清 settings.json 和 keybindings.json
settings.json 存放所有通用配置(字体、缩进、自动保存等),而 keybindings.json 是独立文件,控制快捷键映射。两者路径不同、同步机制也不同:Settings Sync 默认同步前者,但后者需显式勾选“Keyboard Shortcuts”选项,否则新机上 Ctrl+P 仍会打开命令面板而非你自定义的搜索动作。
实操要点:
-
settings.json位置:%APPDATA%\Code\User\settings.json(Windows)或$HOME/Library/Application Support/Code/User/settings.json(macOS) -
keybindings.json路径相同,但文件名不同;若该文件不存在,VSCode 不会自动生成,需手动创建 - 避免直接覆盖新机
settings.json:先用 VSCode 打开它,再粘贴旧配置,防止丢失新版本新增的默认项(如"editor.inlineSuggest.enabled": true)
离线场景下必须重定向 VSCODE_EXTENSIONS 环境变量
企业内网机器无法访问 marketplace.visualstudio.com,即使有 extensions.txt 也无法执行 code --install-extension。此时需提前下载插件 VSIX 包,并通过环境变量让 VSCode 从本地目录加载。
关键步骤:
- 在有网机器上用
code --install-extension ms-python.python --force安装插件,然后去%USERPROFILE%\.vscode\extensions\找到对应文件夹(如ms-python.python-2023.10.1),压缩为 ZIP - 在离线机解压所有插件到统一目录,例如
D:\vscode-ext\ - 执行
setx VSCODE_EXTENSIONS "D:\vscode-ext"(Windows)或export VSCODE_EXTENSIONS="/opt/vscode-ext"(Linux/macOS) - 重启 VSCode 后,插件会从该目录加载,
Extensions视图里显示“Installed from disk”
code --sync-login 在无外网时完全失效,别依赖它
官方 Settings Sync 功能本质是把配置加密后上传至 GitHub Gist,所有命令(code --sync-login、code --sync-upload)都依赖 HTTPS 连接。内网断开外网后,这些命令会卡住或报错 Failed to connect to github.com,且不会回退到本地备份逻辑。
真正能兜底的方式只有两种:
- 提前导出
settings.json+keybindings.json+snippets/目录,用 U 盘拷贝 - 用脚本自动化打包:将上述文件 +
extensions.txt+ 预下载的 VSIX 压缩为vscode-env-202609.zip,解压即用
最易被忽略的一点:workspaceStorage 目录(位于 %APPDATA%\Code\User\workspaceStorage)存有项目级缓存和调试状态,迁移大型项目时若忽略它,首次打开会触发全量索引,CPU 占用飙升且耗时数分钟。











