能同步扩展列表但不自动安装,需手动确认;受网络、平台兼容性、作者维护状态等限制,且 extensions.json 不记录已装扩展,验证应查看 extensions 视图或命令行统计。

Settings Sync 能不能同步扩展?能,但有前提
VSCode 内置的 Settings Sync 功能默认会同步已安装扩展列表(即 extensions.json),但**不会自动下载并安装扩展本身**——它只记录你装了哪些扩展,并在另一台设备上触发「推荐安装」提示。是否真能装上,取决于几个现实条件:
- 目标设备网络可访问 marketplace.visualstudio.com(国内部分网络可能被限)
- 扩展未标记为“仅限特定平台”(如含 native binary 的插件,
esbenp.prettier-vscode通常没问题,但ms-vscode.cpptools在 Apple Silicon 和 Intel Mac 上版本不同,可能跳过) - 扩展作者未下架或改名(例如旧版
dbaeumer.vscode-eslint已重定向,同步时可能报Extension 'dbaeumer.vscode-eslint' not found)
所以别指望点一下“下载同步”就万事大吉;看到状态栏提示「12 extensions to install」,得手动点进去确认安装完成。
为什么刚同步完,extensions.json 里一堆空数组?
这是常见错觉。打开 ~/.config/Code/User/extensions.json(Linux)或对应路径,发现 "recommendations": [] 和 "unwantedRecommendations": [] 都为空——不代表没同步,而是 VSCode **不把已安装扩展写进这个文件**。它只用该文件存「工作区推荐」和「用户屏蔽项」。
真正反映你装了什么的,是 VSCode 启动时读取的内部扩展注册表,以及同步服务端维护的加密快照。验证是否生效,直接看「Extensions」视图右上角是否有「Synced extensions」标签,或运行命令 Extensions: Show Installed Extensions 查数量是否匹配。
手动导出/重装扩展列表更可控
当内置同步卡在某几个扩展、或你想跳过 Marketplace 依赖时,用 CLI 导出导入最稳:
- 在源机器执行:
code --list-extensions --show-versions > extensions.txt - 检查
extensions.txt,删掉带平台后缀的行(如ms-vscode.cpptools@1.19.4-win32-x64) - 在目标机器执行:
cat extensions.txt | xargs -L 1 code --install-extension
注意:--show-versions 很关键——没它,某些插件(如 rust-lang.rust-analyzer)可能因版本兼容问题静默失败;而带版本号重装,能规避缓存导致的「明明装了却不起作用」问题。
同步扩展时最容易被忽略的坑
不是所有扩展都适合无脑同步。以下几类要特别留心:
-
settings.json里硬编码了本地路径的扩展(如eamodio.gitlens的gitlens.advanced.messages)——同步到另一台电脑后可能报错或失效 - 依赖系统级工具的扩展(如
ms-python.python指向的python解释器路径),同步后需手动在设置里重选 interpreter - 企业环境禁用 Marketplace 的场景:即使
Settings Sync显示「extensions synced」,实际也不会触发安装,得配合code --install-extension+ 离线.vsix包使用
真正的扩展一致性,靠的是「同步列表 + 人工校验 + 按需重配」,而不是幻想一键拉齐所有行为。











