VSCode 1.84 起仅支持 Microsoft 账户新版 Settings Sync:需 VSCode ≥ 1.74 且启用 Remote Development 扩展,通过命令面板开启并登录 Outlook/Hotmail 账户,勾选 Settings、Extensions 等项即可自动同步;插件需手动安装,含绝对路径的配置须改用环境变量,敏感字段默认排除,工作区设置及缓存文件不参与同步。

VSCode 官方已在 1.84 版本(2023 年 10 月)彻底移除旧版 Settings Sync,目前唯一受支持的云端同步路径是通过 Microsoft 账户启用新版 Settings Sync —— 它不依赖 GitHub Token、不生成 Gist、也不需要第三方扩展。
Settings Sync 怎么开启(Microsoft 账户方式)
新版同步是 VSCode 内置功能,但需满足两个硬性前提:VSCode ≥ 1.74,且已安装并启用 Remote Development 扩展包(它隐式提供账户服务支持)。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并运行Settings Sync: Turn On - 选择 Microsoft 账户登录(outlook.com / hotmail.com / live.com 均可;GitHub 账号直登会失败)
- 勾选要同步的内容:至少包括
Settings、Extensions、Keybindings、Snippets;UI State建议也勾上,否则新设备上侧边栏、终端面板等布局不会还原 - 登录成功后,状态栏右下角显示
Sync: On,无需重启,同步自动开始
为什么插件没装上或配置不生效
同步不是“一键复制环境”,很多问题出在识别逻辑和字段白名单上:
-
Extensions同步的是插件 ID 列表,不是二进制文件本身;新设备上需等待自动安装完成(可看状态栏提示或运行Developer: Show Running Extensions,确认 Location 列为Sync) -
settings.json中含绝对路径的字段(如"python.defaultInterpreter": "/Users/xxx/.pyenv/versions/3.11/bin/python")会被静默跳过 —— 改用变量:"python.defaultInterpreter": "${env:HOME}/.pyenv/versions/3.11/bin/python" - 扩展自定义配置是否同步,取决于该扩展是否在
package.json的contributes.configuration.properties中声明sync: true;例如prettier.prettierPath在旧版 Prettier 中不支持同步,新版已修复 - 敏感字段如
http.proxy、git.path、telemetry.enableTelemetry默认被排除;若必须同步,需在settings.json中显式添加:"sync.ignoredSettings": []
同步失败常见报错和定位方法
别猜网络问题,先打开开发者工具看真实错误:
- 运行
Developer: Toggle Developer Tools→ 切到 Console 标签页 → 搜索SyncServiceError或403/401 -
401 Unauthorized:微软账户登录态异常,或组织账号启用了条件访问策略(需 IT 管理员授权Visual Studio Code Settings Sync应用) -
403 Forbidden:企业防火墙拦截了vscode-sync.trafficmanager.net,无法绕过,只能改用 Git 备份方案 - 同步卡在
Signing in:检查settings.json是否存在语法错误(如末尾多逗号、单引号代替双引号),VSCode 会静默失败 - 状态栏显示
Not synced但无报错:运行Settings Sync: Show Synced Settings查看实际已同步项,确认关键字段是否在白名单内
哪些内容根本不会同步(别白费劲)
Settings Sync 不是备份工具,它的设计目标是“跨设备保持用户级体验一致”,而非全量镜像:
- 工作区设置(
.vscode/settings.json)完全不参与同步,只存在于当前项目目录 -
tasks.json、launch.json、extensions.json(注意:这不是插件列表文件,是 VSCode 自己用的缓存)均不上传 - 插件自身的缓存、语言服务器二进制、主题资源包等不会同步,只同步启用状态和配置
- 任何以
sync.开头的设置项(如sync.autoDownload)本身被排除,仅用于控制同步行为 - 你手动修改过的
keybindings.json若含注释或单引号,同步时会被丢弃 —— 只接受标准 JSON 格式
真正容易被忽略的点是:同步机制对“本地强相关配置”毫无容错能力。比如你在 macOS 上同步了 terminal.integrated.env.osx,换到 Windows 设备后,这个字段直接消失,不会 fallback 到空或默认值 —— 它只是被过滤掉了。所以越想靠同步省事,越得提前用 ${env:HOME}、${env:USERPROFILE} 这类变量重写路径,而不是等报错再改。











