设置同步

设置同步功能允许您在多个设备之间共享您的Visual Studio Code配置,例如设置、快捷键绑定和已安装的扩展,这样您始终可以使用您喜欢的设置进行工作。

注意: VS Code 不会将您的扩展同步到或从远程窗口,例如当您连接到 SSH、开发容器(devcontainer)或 WSL 时。

开启设置同步

您可以通过在管理齿轮菜单或活动栏底部的账户菜单中使用备份和同步设置...条目来开启设置同步。

管理菜单的截图,突出显示了备份和同步设置命令。

要使用同步设置,您需要登录并选择要同步的设置。目前,设置同步支持以下设置:

  • 设置
  • 键盘快捷键
  • 用户代码片段
  • 用户任务
  • UI 状态
  • 扩展
  • Profiles

设置同步配置快速选择的截图,用于选择要同步的设置。

当你选择登录按钮时,你可以选择使用你的Microsoft或GitHub账户登录。

设置同步快速选择以选择账户类型的截图。

做出此选择后,浏览器将打开,以便您可以登录到您的Microsoft或GitHub帐户。如果您选择Microsoft帐户,您可以使用个人帐户,例如Outlook帐户,或Azure帐户,并且您还可以将GitHub帐户链接到新的或现有的Microsoft帐户。

登录后,设置同步功能将开启,并在后台自动同步您的偏好设置。

合并或替换

如果您已经在一台机器上同步,并在另一台机器上开启同步,您将会看到以下合并或替换对话框。

设置同步合并或替换对话框

  • 合并: 选择此选项将合并本地设置与来自云的远程设置。
  • 替换本地: 选择此选项将使用云端的远程设置覆盖本地设置。
  • 手动合并...: 选择此选项将打开合并视图,您可以在其中逐个合并首选项。

设置同步合并

配置同步数据

机器设置(带有machinemachine-overridable 作用域)默认情况下不会同步,因为它们的值特定于给定的机器。您还可以从设置编辑器或使用设置settingsSync.ignoredSettings添加或删除您想要的设置到此列表中。

设置同步忽略的设置

键盘快捷键默认按平台同步。如果您的键盘快捷键与平台无关,可以通过禁用设置 settingsSync.keybindingsPerPlatform 来跨平台同步它们。

所有内置和已安装的扩展及其全局启用状态都会同步。您可以从扩展视图(⇧⌘X (Windows, Linux Ctrl+Shift+X))或使用设置settingsSync.ignoredExtensions跳过同步某个扩展。

设置同步忽略的设置

当前同步的UI状态如下:

  • 显示语言
  • 活动栏条目
  • 面板条目
  • 视图布局和可见性
  • 最近使用的命令
  • 不再显示通知

您始终可以通过设置同步:配置命令或打开管理齿轮菜单,选择设置同步已开启,然后选择设置同步:配置来更改同步的内容。

冲突

在多台机器之间同步设置时,偶尔可能会发生冲突。冲突可能在首次在机器之间设置同步时发生,或者在机器离线时设置发生变化时发生。当发生冲突时,您将看到以下选项:

  • 接受本地: 选择此选项将用您的本地设置覆盖云中的远程设置。
  • 接受远程: 选择此选项将使用来自云的远程设置覆盖本地设置。
  • 显示冲突:选择此选项将显示一个类似于源代码控制差异编辑器的差异编辑器,您可以在其中预览本地和远程设置,并选择接受本地或远程设置,或手动解决本地设置文件中的更改,然后接受本地文件。

切换账户

如果您想随时将数据同步到不同的账户,您可以关闭并再次使用不同的账户开启设置同步。

同步稳定版与内测版

默认情况下,VS Code 稳定版和 Insiders 版本使用不同的设置同步服务,因此不会共享设置。您可以通过在开启设置同步时选择稳定版同步服务来将您的 Insiders 版本与稳定版同步。此选项仅在 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 设置同步与设置同步扩展是相同的吗?

不,由Settings Sync扩展,由Shan Khan开发,使用GitHub上的私有Gist来在不同机器之间共享您的VS Code设置,与VS Code Settings Sync无关。

我可以使用哪些类型的账户进行设置同步登录?

VS Code 设置同步支持使用 Microsoft 账户(例如 Outlook 或 Azure 账户)或 GitHub 账户登录。不支持使用 GitHub Enterprise 账户登录。未来可能会支持其他身份验证提供商,您可以在 issue #88309 中查看提议的身份验证提供商 API。

注意: VS Code 设置同步目前不支持使用您的 Microsoft 主权云 账户。如果您希望支持此功能,请告诉我们您希望使用哪种类型的 Microsoft 主权云 在这个 GitHub 问题中

我可以使用不同的后端或服务进行设置同步吗?

设置同步使用专用服务来存储设置并协调更新。未来可能会公开服务提供商API,以允许自定义设置同步后端。

解决钥匙串问题

注意: 本节适用于 VS Code 版本 1.80 及更高版本。在 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(或类似)

如果您看到的错误是“无法在锁定的集合中创建项目”,那么很可能是您的钥匙环的Login钥匙环被锁定了。您应该启动操作系统的钥匙环(Seahorse是常用的查看钥匙环的图形界面),并确保默认钥匙环(通常称为Login钥匙环)已解锁。当您登录系统时,此钥匙环需要处于解锁状态。

核密度估计

KDE 6 尚未被 Visual Studio Code 完全支持。作为一种解决方法:最新的 kwallet6 也可以作为 kwallet5 访问,因此您可以通过将密码存储设置为 kwallet5 来强制使用 kwallet5,如下文 配置与 VS Code 一起使用的密钥环 中所述。

您的钱包(也称为钥匙环)可能已关闭。如果您打开KWalletManager,您可以查看默认的kdewallet是否已关闭,如果是,请确保您打开它。

如果您使用的是KDE5或更高版本,并且在连接到kwallet5时遇到问题(如问题 #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上提交一个问题,并附上上述的详细日志。这对我们支持额外的桌面配置非常重要。

你可以通过传递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"

以下是password-store的所有可能值,如果您想尝试使用不同于gnome-keyring的密钥环:

  • kwallet5: 用于与 kwalletmanager5 一起使用。
  • gnome-libsecret: 用于任何实现 Secret Service API 的包(例如 gnome-keyring, kwallet5, KeepassXC)。
  • (不推荐) kwallet: 用于旧版本的 kwallet
  • (不推荐) basic: 有关更多详细信息,请参阅下面的基本文本部分

如果在使用过程中遇到任何问题,请不要犹豫,在VS Code上提交一个问题并附上详细的日志。

我们依赖Chromium的oscrypt模块来发现和存储密钥环中的加密密钥信息。Chromium提供了一种选择加入的回退加密策略,该策略使用基于Chromium源代码中硬编码字符串的内存密钥。因此,这种回退策略最多只能算是混淆,只有在您接受系统上任何进程理论上都可以解密您存储的机密信息的风险时,才应使用。

如果您接受此风险,您可以通过打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))并运行Preferences: Configure Runtime Arguments命令来将password-store设置为basic。这将打开argv.json文件,您可以在其中添加设置"password-store":"basic"

我可以在VS Code稳定版和Insiders版之间共享设置吗?

是的。请参考同步稳定版与内测版部分以获取更多信息。

请注意,这有时可能会导致数据不兼容,因为Insiders版本比Stable版本更新。在这种情况下,Settings Sync将在Stable版本上自动禁用,以防止数据不一致。一旦发布了新版本的Stable版本,您可以升级客户端并打开Settings Sync以继续同步。