VS Code 设置同步功能详解
VS Code 设置同步功能详解
VS Code的设置同步功能允许用户跨计算机共享配置,包括设置、键盘快捷方式、已安装的扩展等,使用户能够在不同设备上保持一致的开发环境。本文将详细介绍如何启用和管理设置同步功能,以及在使用过程中可能遇到的问题和解决方案。
编辑
设置同步
设置同步允许您跨计算机共享 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、LinuxCtrl+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
的示例。
报告问题
可以在Log (Settings Sync)输出视图中监视设置同步活动。如果您在使用设置同步时遇到问题,请在创建问题时包含此日志。如果您的问与身份验证有关,还请包含Account输出视图中的日志。
如何删除我的数据?
如果您想从我们的服务器中删除您的所有数据,只需通过管理齿轮菜单下提供的设置同步已开启菜单关闭同步,然后选中复选框以清除所有云数据。如果您选择重新启用同步,则就像您是第一次登录一样。
后续步骤
- 用户和工作区设置- 了解如何通过用户和工作区设置将 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、LinuxCtrl+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、LinuxCtrl+Shift+P)) 并运行首选项:配置运行时参数命令,将
password-store
设置为
basic
。这将打开
argv.json
文件,您可以在其中添加设置
"password-store":"basic"
。
我可以在 VS Code 稳定版和 Insiders 版之间共享设置吗?
是。请参阅同步稳定版与 Insiders 版部分以获取更多信息。
请注意,这有时会导致数据不兼容,因为 Insiders 版本比稳定版新。在这种情况下,设置同步将在稳定版上自动禁用,以防止数据不一致。一旦发布了较新版本的稳定版,您可以升级您的客户端并开启设置同步以继续同步。