设置同步
设置同步允许您跨机器共享 Visual Studio Code 配置,例如设置、键盘快捷方式和已安装的扩展,以便您始终使用自己喜欢的设置进行工作。
注意:当您连接到 SSH、开发容器 (devcontainer) 或 WSL 等远程窗口时,VS Code 不会同步您的扩展到远程窗口或从远程窗口同步扩展。
开启设置同步
您可以使用管理齿轮菜单或活动栏底部的帐户菜单中的备份和同步设置...条目来开启设置同步。
要使用同步设置,您需要登录并选择要同步的设置。目前,设置同步支持以下设置
- 设置
- 键盘快捷方式
- 用户代码片段
- 用户任务
- 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 状态
- 显示语言
- 活动栏条目
- 面板条目
- 视图布局和可见性
- 最近使用的命令
- 不再显示通知
您可以随时通过设置同步:配置命令或打开管理齿轮菜单,选择设置同步已开启,然后选择设置同步:配置来更改同步的内容。
冲突
在多台机器之间同步设置时,偶尔可能会发生冲突。当首次在机器之间设置同步或在机器离线时设置更改时,可能会发生冲突。发生冲突时,您将看到以下选项
- 接受本地:选择此选项将使用您的本地设置覆盖云端的远程设置。
- 接受远程:选择此选项将使用云端的远程设置覆盖本地设置。
- 显示冲突:选择此选项将显示类似于源代码管理差异编辑器的差异编辑器,您可以在其中预览本地和远程设置,并选择接受本地或远程设置,或者手动解决本地设置文件中的更改,然后接受本地文件。
切换帐户
如果您随时想要将您的数据同步到不同的帐户,您可以关闭设置同步,然后使用不同的帐户再次开启设置同步。
同步稳定版与 Insiders 版
默认情况下,VS Code 稳定版和 Insiders 版本使用不同的设置同步服务,因此不共享设置。您可以在开启设置同步时选择稳定版同步服务,将您的 Insiders 版本与稳定版同步。此选项仅在 VS Code Insiders 中可用。
注意:由于 Insiders 版本比稳定版更新,因此同步它们有时可能会导致数据不兼容。在这种情况下,设置同步将在稳定版上自动禁用,以防止数据不一致。一旦发布较新版本的稳定版,您可以升级您的稳定版客户端并开启同步以继续同步。
恢复数据
VS Code 在同步时始终存储您的首选项的本地和远程备份,并提供用于访问这些备份的视图。如果出现问题,您可以从这些视图中恢复您的数据。
您可以使用命令面板中的设置同步:显示已同步数据命令打开这些视图。本地同步活动视图默认情况下处于隐藏状态,您可以使用设置同步视图溢出操作下的视图子菜单启用它。
可以通过设置同步:打开本地备份文件夹命令访问磁盘中的本地备份文件夹。该文件夹按首选项类型组织,并包含 JSON 文件的版本,这些版本以备份发生的时间戳命名。
注意:本地备份会在 30 天后自动删除。对于远程备份,每个单独资源(设置、扩展等)的最新 20 个版本将被保留。
已同步的机器
VS Code 会跟踪同步您的首选项的机器,并提供一个视图来访问它们。每台机器都根据 VS Code 的类型(Insiders 版或稳定版)和它所在的平台获得一个默认名称。您可以随时使用视图中机器条目上提供的编辑操作来更新机器名称。您还可以使用视图中机器条目上的关闭设置同步上下文菜单操作禁用另一台机器上的同步。
您可以使用命令面板中的设置同步:显示已同步数据命令打开此视图。
扩展作者
如果您是扩展作者,则应确保您的扩展在用户启用设置同步时行为恰当。例如,您可能不希望您的扩展在多台机器上显示相同的已忽略通知或欢迎页面。
在机器之间同步用户全局状态
如果您的扩展需要在不同的机器之间保留一些用户状态,请使用 vscode.ExtensionContext.globalState.setKeysForSync
将状态提供给设置同步。在机器之间共享 UI 忽略或已查看标志等状态可以提供更好的用户体验。
在扩展功能主题中,有一个使用 setKeysforSync
的示例。
报告问题
可以在输出(设置同步)输出视图中监视设置同步活动。如果您在设置同步方面遇到问题,请在创建问题时包含此日志。如果您的的问题与身份验证有关,还请包含帐户输出视图中的日志。
如何删除我的数据?
如果您想从我们的服务器中删除您的所有数据,只需通过管理齿轮菜单下提供的设置同步已开启菜单关闭同步,然后选中复选框以清除所有云数据。如果您选择重新启用同步,则就像您是第一次登录一样。
后续步骤
- 用户和工作区设置 - 了解如何通过用户和工作区设置将 VS Code 配置为您的首选项。
常见问题
VS Code 设置同步与设置同步扩展相同吗?
不,Settings Sync 扩展由 Shan Khan 开发,它使用 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 Sovereign Cloud 类型。
我可以为设置同步使用不同的后端或服务吗?
设置同步使用专用服务来存储设置和协调更新。将来可能会公开服务提供程序 API,以允许自定义设置同步后端。
解决密钥链问题
注意:本节适用于 VS Code 1.80 及更高版本。在 1.80 中,由于 keytar 已存档,我们转而使用 Electron 的 safeStorage API。
注意:密钥链、密钥环、钱包、凭据存储在本文档中是同义词。
设置同步在桌面上使用操作系统密钥链来持久化身份验证信息以进行加密。在某些情况下,如果密钥链配置错误或环境无法识别,则使用密钥链可能会失败。
为了帮助诊断问题,您可以重新启动 VS Code 并使用以下标志生成详细日志
code --verbose --vmodule="*/components/os_crypt/*=1"
Windows 和 macOS
目前,Windows 或 macOS 上没有已知的配置问题,但是,如果您怀疑出现问题,您可以使用上述详细日志在 VS Code 上打开一个 issue。这对我们支持其他桌面配置非常重要。
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 是常用的用于查看密钥环的 GUI),并确保默认密钥环(通常称为 Login
密钥环)已解锁。当您登录系统时,需要解锁此密钥环。
KDE
Visual Studio Code 尚未完全支持 KDE 6。作为一种解决方法:最新的 kwallet6 也可以作为 kwallet5 访问,因此您可以通过将密码存储设置为
kwallet5
来强制它使用 kwallet5,如下面的配置要与 VS Code 一起使用的密钥环中所述。
您的钱包(又名密钥环)可能已关闭。如果您打开 KWalletManager,您可以看到默认的 kdewallet
是否已关闭,如果已关闭,请确保您将其打开。
如果您使用的是 KDE5 或更高版本,并且在连接到 kwallet5
时遇到问题(例如非官方 VS Code Flatpak 的用户在 issue #189672 中遇到的问题),您可以尝试配置密钥环为 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 上打开一个 issue。这对我们支持其他桌面配置非常重要。
(推荐)配置要与 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
:有关更多详细信息,请参阅下面关于基本文本的部分。
如果您遇到任何问题,请随时使用详细日志在 VS Code 上打开一个 issue。
(不推荐)配置基本文本加密
我们依赖 Chromium 的 oscrypt 模块来发现和存储密钥环中的加密密钥信息。Chromium 提供了一种选择加入的后备加密策略,该策略使用基于 Chromium 源代码中硬编码的字符串的内存密钥。因此,这种后备策略充其量只是混淆,并且仅当您接受系统上的任何进程理论上都可以解密您存储的机密的风险时才应使用。
如果您接受此风险,则可以通过打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))并运行 首选项:配置运行时参数 命令将 password-store
设置为 basic
。这将打开 argv.json
文件,您可以在其中添加设置 "password-store":"basic"
。
我可以在 VS Code 稳定版和 Insiders 版之间共享设置吗?
是的。请参阅同步稳定版与 Insiders 版部分以获取更多信息。
请注意,这有时可能会导致数据不兼容,因为 Insiders 版本比稳定版更新。在这种情况下,设置同步将在稳定版上自动禁用,以防止数据不一致。一旦发布较新版本的稳定版,您可以升级您的客户端并开启设置同步以继续同步。