设置同步
设置同步(Settings Sync)允许你在多台机器之间共享 Visual Studio Code 配置(如设置、键盘快捷方式和已安装的扩展),从而让你始终能够使用自己偏好的开发环境。
注意:VS Code 不会向远程窗口同步扩展,也不会从远程窗口同步扩展,例如当你连接到 SSH、开发容器 (devcontainer) 或 WSL 时。
开启设置同步
你可以通过点击管理齿轮菜单中的备份并同步设置...,或活动栏底部的账户菜单来开启设置同步。

要使用同步设置,你需要登录并选择要同步的设置。目前,设置同步支持以下设置:
- 设置
- 键盘快捷键
- 用户代码片段
- 用户任务
- UI 状态
- 扩展
- 配置文件

点击登录按钮时,你可以选择使用 Microsoft 账户或 GitHub 账户进行登录。

选择后,浏览器将打开,以便你登录 Microsoft 或 GitHub 账户。如果选择 Microsoft 账户,你可以使用个人账户(如 Outlook 账户)或 Azure 账户,也可以将 GitHub 账户关联到新的或现有的 Microsoft 账户。
登录后,设置同步即开启,并会在后台自动持续同步你的偏好设置。
合并或替换
如果你已经从一台机器同步过,并在另一台机器上开启同步,系统将向你显示合并或替换对话框。

- 合并:选择此选项会将本地设置与来自云端的远程设置合并。
- 替换本地:选择此选项将使用来自云端的远程设置覆盖本地设置。
- 手动合并...:选择此选项将打开合并视图,你可以在其中逐一合并各项偏好设置。

配置同步数据
机器设置(具有 machine 或 machine-overridable 作用域的设置)默认不会同步,因为它们的值是针对特定机器的。你也可以通过设置编辑器或使用设置 settingsSync.ignoredSettings 将设置添加到此列表或从中移除。

键盘快捷方式默认按平台同步。如果你的键盘快捷方式不区分平台,可以通过禁用 settingsSync.keybindingsPerPlatform 设置来跨平台同步它们。
所有内置和已安装的扩展及其全局启用状态都会同步。你可以通过扩展视图(⇧⌘X (Windows, Linux Ctrl+Shift+X))或使用设置 settingsSync.ignoredExtensions 来跳过某个扩展的同步。

目前同步的 UI 状态如下:
- 显示语言
- 活动栏条目
- 面板条目
- 视图布局和可见性
- 最近使用的命令
- 不再显示通知
你可以随时通过设置同步:配置命令,或者打开管理齿轮菜单,选择设置同步已开启,然后选择设置同步:配置来更改同步内容。
冲突
在多台机器之间同步设置时,偶尔会出现冲突。冲突可能发生在首次设置机器间同步时,或者当某台机器离线时设置发生了更改。发生冲突时,系统会向你提供以下选项:
- 接受本地:选择此选项会将云端的远程设置覆盖为你的本地设置。
- 接受远程:选择此选项会将本地设置覆盖为来自云端的远程设置。
- 显示冲突:选择此项将显示类似于源代码管理差异编辑器的差异编辑器,你可以在其中预览本地和远程设置,并选择接受本地或远程版本,或者手动解决本地设置文件中的更改,然后接受本地文件。
切换账户
如果你想随时将数据同步到另一个账户,可以先关闭设置同步,然后使用另一个账户再次开启。关闭同步的命令是设置同步:关闭。
Stable 与 Insiders 版本之间的同步
默认情况下,VS Code Stable 和 Insiders 版本使用不同的设置同步服务,因此不会共享设置。你可以通过在开启设置同步时选择 Stable 同步服务,将你的 Insiders 版本与 Stable 版本同步。此选项仅在 VS Code Insiders 中可用。

注意:由于 Insiders 版本比 Stable 版本更新,同步它们有时会导致数据不兼容。在这种情况下,Stable 版本上的设置同步将自动禁用,以防止数据不一致。一旦发布了更新的 Stable 版本,你就可以升级你的 Stable 客户端并开启同步以继续同步。
恢复数据
VS Code 在同步时始终会存储偏好设置的本地和远程备份,并提供查看这些备份的视图。如果出现问题,你可以从这些视图中恢复数据。

你可以使用命令面板中的设置同步:显示已同步数据命令来打开这些视图。本地同步活动视图默认是隐藏的,你可以使用设置同步视图溢出操作下的视图子菜单来启用它。

磁盘上的本地备份文件夹可以通过设置同步:打开本地备份文件夹命令进行访问。该文件夹按偏好设置类型组织,并包含 JSON 文件的各个版本,文件名包含备份发生的时间戳。
注意:本地备份会在 30 天后自动删除。远程备份会保留每个单独资源(设置、扩展等)的最近 20 个版本。
已同步的机器
VS Code 会跟踪同步你偏好设置的机器,并提供查看它们的视图。每台机器都会根据其 VS Code 类型(Insiders 或 Stable)和运行的平台获得一个默认名称。你可以随时使用视图中机器条目上的编辑操作来更新机器名称。你也可以使用机器条目上的关闭设置同步上下文菜单操作在其他机器上禁用同步。

你可以使用命令面板中的设置同步:显示已同步数据命令来打开此视图。
扩展作者
如果你是一名扩展作者,应确保你的扩展在用户启用设置同步时表现正常。例如,你可能不希望你的扩展在多台机器上显示相同的已关闭通知或欢迎页面。
在机器间同步用户全局状态
如果你的扩展需要在不同机器间保留某些用户状态,请使用 vscode.ExtensionContext.globalState.setKeysForSync 将状态提供给设置同步。在机器间共享诸如 UI 已关闭或已查看标记之类的状态可以提供更好的用户体验。
在扩展能力主题中有一个使用 setKeysforSync 的示例。
报告问题
可以在日志(设置同步)输出视图中监控设置同步活动。如果你遇到设置同步的问题,请在创建工单时附上此日志。如果问题与身份验证有关,请同时附上账户输出视图中的日志。
如何删除我的数据?
如果你想从我们的服务器上删除所有数据,只需通过管理齿轮菜单下的设置同步已开启菜单关闭同步,并勾选复选框以清除所有云端数据即可。如果你选择重新启用同步,操作过程将如同首次登录一样。
后续步骤
- 用户和工作区设置 - 了解如何通过用户和工作区设置将 VS Code 配置为你偏好的样子。
常见问题
VS Code 设置同步与“Settings Sync”扩展是一回事吗?
不是。由 Shan Khan 开发的 Settings Sync 扩展使用 GitHub 上的私有 Gist 来跨不同机器共享 VS Code 设置,它与 VS Code 的设置同步功能无关。
我可以使用哪些类型的账户来登录设置同步?
VS Code 设置同步支持使用 Microsoft 账户(例如 Outlook 或 Azure 账户)或 GitHub 账户登录。不支持使用 GitHub Enterprise 账户登录。未来可能会支持其他身份验证提供程序,你可以在 issue #88309 中查看提议的身份验证提供程序 API。
注意:VS Code 设置同步目前不支持使用你的 Microsoft 主权云 (Sovereign Cloud) 账户。如果你有此需求,请在 此 GitHub issue 中告诉我们你想使用哪种 Microsoft 主权云。
我可以使用其他后端或服务来进行设置同步吗?
设置同步使用专用服务来存储设置并协调更新。未来可能会公开服务提供商 API,以允许使用自定义的设置同步后端。
排查密钥链 (Keychain) 问题
注意:本节适用于 1.80 及更高版本的 VS Code。在 1.80 版本中,由于 keytar 已归档,我们弃用了它,改用 Electron 的 safeStorage API。
注意:本文档中密钥链 (keychain)、钥匙环 (keyring)、钱包 (wallet) 和凭据存储 (credential store) 为同义词。
设置同步在桌面端使用操作系统密钥链进行加密以持久化身份验证信息。如果密钥链配置错误或环境未被识别,使用密钥链在某些情况下可能会失败。
为了帮助诊断问题,你可以使用以下标志重启 VS Code 以生成详细日志:
code --verbose --vmodule="*/components/os_crypt/*=1"
Windows 和 macOS
目前,Windows 或 macOS 上没有已知的配置问题。但如果你怀疑有问题,可以使用上述详细日志在 VS Code 上提交工单。这对我们支持更多桌面配置非常重要。
Linux
在上述命令生成的日志顶部附近,你会看到类似以下内容:
[9699:0626/093542.027629:VERBOSE1:key_storage_util_linux.cc(54)] Password storage detected desktop environment: GNOME
[9699:0626/093542.027660:VERBOSE1:key_storage_linux.cc(122)] Selected backend for OSCrypt: GNOME_LIBSECRET
我们依赖 Chromium 的 oscrypt 模块在钥匙环中发现并存储加密密钥信息。Chromium 支持多种不同的桌面环境。下面概述了一些流行的桌面环境以及如果钥匙环配置错误可以尝试的故障排除步骤。
GNOME 或 UNITY(或类似环境)
如果你看到的错误是“Cannot create an item in a locked collection”(无法在锁定的集合中创建项目),很可能是你的钥匙环中的 Login 钥匙环已锁定。你应该启动操作系统的钥匙环管理工具(Seahorse 是常用的钥匙环 GUI 查看工具),并确保默认钥匙环(通常称为 Login 钥匙环)已解锁。当你登录系统时,此钥匙环需要处于解锁状态。
KDE
Visual Studio Code 目前尚未完全支持 KDE 6。作为临时解决方案:最新的 kwallet6 也可作为 kwallet5 访问,因此你可以通过将密码存储设置为
kwallet5来强制其使用 kwallet5,具体操作请参考下方 配置要与 VS Code 一起使用的钥匙环。
你的钱包(即钥匙环)可能处于关闭状态。如果打开 KWalletManager,你可以查看默认的 kdewallet 是否已关闭;如果是,请确保将其打开。
如果你使用的是 KDE5 或更高版本,并且在连接到 kwallet5 时遇到困难(例如 issue #189672 中非官方 VS Code Flatpak 的用户),可以尝试将钥匙环配置为 gnome-libsecret,因为这将使用 Secret Service API 与任何有效的钥匙环进行通信。kwallet5 实现了 Secret Service API,可以通过这种方式访问。
如果你在连接到 kwallet5 时仍然遇到问题,一些用户反馈授予特定的 D-Bus 服务权限是一个可行的修复方案:
flatpak override --user --talk-name=org.kde.kwalletd5 --talk-name=org.freedesktop.secrets com.visualstudio.code
其他 Linux 桌面环境
首先,如果你的桌面环境未被识别,你可以使用上述详细日志在 VS Code 上提交工单。这对我们支持更多桌面配置非常重要。
(推荐)配置要与 VS Code 一起使用的钥匙环
你可以通过传递 password-store 标志手动告诉 VS Code 使用哪个钥匙环。我们推荐的配置是:如果你还没有安装 gnome-keyring,请先安装它,然后使用 code --password-store="gnome-libsecret" 启动 VS Code。
如果此方案对你有效,你可以通过打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))并运行首选项:配置运行时参数命令来持久化 password-store 的值。这将打开 argv.json 文件,你可以在其中添加设置 "password-store":"gnome-libsecret"。
如果你想尝试使用除 gnome-keyring 之外的钥匙环,以下是 password-store 所有可能的值:
kwallet5:用于 kwalletmanager5。gnome-libsecret:用于任何实现了 Secret Service API 的包(例如gnome-keyring、kwallet5、KeepassXC)。- (不推荐)
kwallet:用于较旧版本的kwallet。 - (不推荐)
basic:详细信息请参阅下文关于 基础文本 的部分。
如果你的密码存储未被自动检测到,请查看 issue #187338 中是否提到了你的环境。如果没有,欢迎将其添加到该 issue 中,或者如果你认为问题与自动密码存储检测无关,请使用详细日志在 VS Code 上提交工单。
(不推荐)配置基础文本加密
我们依赖 Chromium 的 oscrypt 模块在钥匙环中发现并存储加密密钥信息。Chromium 提供了一种可选择的后备加密策略,该策略使用基于硬编码在 Chromium 源码中的字符串的内存密钥。因此,这种后备策略充其量只是混淆处理,只有在你接受系统中任何进程理论上都能解密你存储的秘密数据的风险时,才应使用它。
如果你接受此风险,可以通过打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))并运行首选项:配置运行时参数命令,将 password-store 设置为 basic。这将打开 argv.json 文件,你可以在其中添加设置 "password-store":"basic"。
我可以在 VS Code Stable 和 Insiders 之间共享设置吗?
是的。请参阅 Stable 与 Insiders 版本之间的同步 部分了解更多信息。
请注意,由于 Insiders 版本比 Stable 版本更新,这有时会导致数据不兼容。在这种情况下,Stable 版本上的设置同步将自动禁用,以防止数据不一致。一旦发布了更新的 Stable 版本,你就可以升级你的客户端并开启设置同步以继续同步。