设置同步
设置同步允许您在所有机器上共享 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 状态
- 显示语言
- 活动栏条目
- 面板条目
- 视图布局和可见性
- 最近使用的命令
- 不再显示通知
您可以始终通过设置同步:配置命令或通过打开管理齿轮菜单、选择设置同步已打开,然后选择设置同步:配置来更改同步的内容。
冲突
在多台机器之间同步设置时,偶尔可能会发生冲突。冲突可能发生在首次在机器之间设置同步时,或者当机器处于脱机状态时设置发生更改时。发生冲突时,将向您提供以下选项
- 接受本地:选择此选项将用您的本地设置覆盖云中的远程设置。
- 接受远程:选择此选项将用云中的远程设置覆盖本地设置。
- 显示冲突:选择此选项将显示与源代码管理差异编辑器类似的差异编辑器,您可以在其中预览本地和远程设置,并选择接受本地或远程设置,或者手动解决本地设置文件中的更改,然后接受本地文件。
切换帐户
如果您在任何时候要将您的数据同步到不同的帐户,您可以关闭并重新打开设置同步,使用不同的帐户。
同步稳定版和内部版本
默认情况下,VS Code 稳定版和内部版 构建使用不同的设置同步服务,因此不共享设置。您可以通过在打开设置同步时选择稳定版同步服务,将内部版本与稳定版同步。此选项仅在 VS Code 内部版中可用。
注意:由于内部版构建比稳定版构建更新,因此同步它们有时会导致数据不兼容。在这种情况下,设置同步将在稳定版中自动禁用,以防止数据不一致。一旦发布了稳定版构建的更新版本,您就可以升级您的稳定版客户端并打开同步以继续同步。
恢复数据
VS Code 在同步时始终存储您首选项的本地和远程备份,并提供访问这些备份的视图。如果出现问题,您可以从这些视图恢复数据。
您可以使用命令面板中的 **设置同步:显示同步数据** 命令打开这些视图。本地同步活动视图默认情况下是隐藏的,您可以使用 **设置同步** 视图溢出操作下的 **视图** 子菜单启用它。
磁盘中的本地备份文件夹可以通过 **设置同步:打开本地备份文件夹** 命令访问。该文件夹按首选项类型组织,包含您的 JSON 文件的版本,并使用备份发生时间的日期戳命名。
**注意**:本地备份会在 30 天后自动删除。对于远程备份,将保留每个单独资源(设置、扩展等)的最新 20 个版本。
同步的机器
VS Code 会跟踪同步您首选项的机器,并提供一个视图来访问它们。每台机器都会根据 VS Code 的类型(内部版或稳定版)和它所在的平台获得一个默认名称。您可以始终使用视图中机器条目上的编辑操作更新机器名称。您还可以使用视图中机器条目上的 **关闭设置同步** 上下文菜单操作在另一台机器上禁用同步。
您可以使用命令面板中的 **设置同步:显示同步数据** 命令打开此视图。
扩展作者
如果您是扩展作者,您应该确保您的扩展在用户启用设置同步时表现得当。例如,您可能不希望您的扩展在多台机器上显示相同的已关闭通知或欢迎页面。
在机器之间同步用户全局状态
如果您的扩展需要在不同的机器之间保留一些用户状态,请使用 `vscode.ExtensionContext.globalState.setKeysForSync` 将状态提供给设置同步。在机器之间共享状态,例如 UI 已关闭或已查看标志,可以提供更好的用户体验。
在 扩展功能 主题中有一个使用 `setKeysforSync` 的示例。
报告问题
可以在 **日志(设置同步)** 输出视图中监控设置同步活动。如果您遇到设置同步问题,请在创建问题时包含此日志。如果您的问题与身份验证有关,请还包含来自 **帐户** 输出视图的日志。
如何删除我的数据?
如果您想从我们的服务器中删除所有数据,只需通过 **设置同步已开启** 菜单(位于 **管理** 齿轮菜单下)关闭同步,然后选中复选框以清除所有云数据。如果您选择重新启用同步,它将如同您第一次登录一样。
下一步
- 用户和工作区设置 - 了解如何通过用户和工作区设置将 VS Code 配置为您的偏好。
常见问题
VS Code 设置同步是否与设置同步扩展相同?
不,设置同步 扩展由 Shan Khan 开发,它使用 GitHub 上的私人 Gist 在不同的机器之间共享您的 VS Code 设置,并且与 VS Code 设置同步无关。
我可以用哪些类型的帐户登录设置同步?
VS Code 设置同步支持使用 Microsoft 帐户(例如 Outlook 或 Azure 帐户)或 GitHub 帐户登录。不支持使用 GitHub 企业版帐户登录。未来可能支持其他身份验证提供商,您可以查看 问题 #88309 中提出的身份验证提供商 API。
**注意**:VS Code 设置同步目前不支持使用您的 Microsoft 主权云 帐户。如果您希望使用它,请告诉我们您想使用哪种 Microsoft 主权云 在这个 GitHub 问题中。
我可以使用不同的后端或服务来进行设置同步吗?
设置同步使用专用服务来存储设置并协调更新。将来可能会公开服务提供商 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 上的问题,并附上上述详细日志。这对于我们支持其他桌面配置非常重要。
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
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 上的问题,并附上上述详细日志。这对于我们支持其他桌面配置非常重要。
(推荐)将密钥环配置为与 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))并运行 **首选项:配置运行时参数** 命令将 `password-store` 设置为 `basic`。这将打开 `argv.json` 文件,您可以在其中添加设置 `“password-store”:“basic”`。
我可以将 VS Code 稳定版和内部版本之间的设置共享吗?
是的。有关更多信息,请参阅 同步稳定版与内部版 部分。
请注意,这有时会导致数据不兼容,因为内部版构建比稳定版构建更新。在这种情况下,设置同步将在稳定版上自动禁用,以防止数据不一致。在发布稳定版的更新版本后,您可以升级客户端并打开设置同步以继续同步。