直接备份.vscode/extensions文件夹不可跨设备还原,因其为非可移植的运行时产物;应使用code --list-extensions --show-versions > extensions.txt导出带版本号的插件id列表,并用code --install-extension --force批量安装,配合手动备份user目录和.ssh配置。

直接备份 .vscode/extensions 文件夹不能跨设备还原,它不是可移植包,而是解压后的运行时产物——不同系统、VSCode 版本、CPU 架构下二进制模块不兼容,强行复制大概率导致插件图标消失、设置页空白或报错 Cannot find module './extension'。
导出插件 ID 列表必须带 --show-versions
只执行 code --list-extensions > extensions.txt 会丢失版本信息,恢复时可能装上新版插件,引发兼容性问题(比如某项目依赖 ms-python.python@2025.12.1,但新装的是 @2026.4.1,LSP 响应异常)。
-
--show-versions输出格式为publisher.name@x.y.z,这是跨环境复现的最小可靠单元 - Windows 用户若用 CMD,重定向符号必须是
>,写成>>会追加内容,下次导出变脏 - 确保
code已加入 PATH:macOS/Linux 运行命令面板 →Shell Command: Install 'code' command in PATH;Windows 检查安装路径是否在环境变量中 - 导出文件务必用 UTF-8 编码保存,否则含中文插件名(如某些国内定制版)会乱码
code --install-extension 批量安装必须加 --force 并控制超时
默认行为是逐个同步等待,网络卡顿或某个插件校验签名失败时会卡死。更糟的是,部分插件(如 ms-vscode.cpptools)即使离线也会尝试连接更新服务器,不设限就无限挂起。
- Linux/macOS 推荐用:
while read ext; do timeout 120 code --install-extension "$ext" --force || true; done
- PowerShell 中:
Get-Content extensions-with-ver.txt | ForEach-Object { code --install-extension $_ --force },但需提前关闭 VSCode 设置里的Extensions: Auto Update -
--force跳过“已存在”提示,避免流程中断;|| true或try/catch确保单个失败不影响后续安装 - 注意:含 native 二进制的插件(如
esbenp.prettier-vscode)要求目标机 Node.js 版本匹配,否则日志显示“Installation completed”但插件不生效
SSH 配置和扩展自身配置文件不在 Settings Sync 范围内
Settings Sync 只同步 settings.json、快捷键、代码片段和插件 ID 列表,但它不备份:
-
%USERPROFILE%\.ssh\config和known_hosts(Remote-SSH 连接必需) - 插件自己的配置文件,例如
Prettier的.prettierrc或ESLint的.eslintrc.js(它们存在项目根目录或用户目录,不随 Settings Sync 上传) -
~/.vscode/extensions/下插件生成的缓存或语言服务器进程(如rust-analyzer的target目录) - 项目级
.vscode/内容(除非你主动git add)
所以最稳组合是:Settings Sync + 手动备份 %APPDATA%\Code\User\(Windows)或 ~/Library/Application Support/Code/User/(macOS)+ 单独拷贝 .ssh 目录。











