有什么方法可以在实例之间同步我的Visual Studio Code设置吗?


123

我希望能够以某种方式将我的VS Code用户设置(“文件”>“首选项”>“用户设置”)同步到云中,以便在Windows 10和Visual Studio中的多个安装之间轻松共享它们。

有支持的方法吗?直接在Code中提供支持会很棒,但否则可以将我的settings.json位置移动到Dropbox或OneDrive文件夹中也可以。

我正在寻找一种自动且无声地执行此操作的方法。手动导出/导入太麻烦了,这不是我想要的。


更新:这里有一个功能要求。如果您想要此功能,请给我一个赞许。


2
一种非常简单的方法是,如果您使用Google的“备份和同步”程序,而只需添加要备份的C:\ Users \ [YOUR_USER] \ AppData \ Roaming \ Code \ User文件夹。
vinsa

Answers:


126

我开发了一个扩展程序,该扩展程序将在多个实例之间同步所有Visual Studio代码设置。

主要特点

  1. 使用您的GitHub帐户令牌。
  2. 一键轻松上传和下载。
  3. 保存所有设置和摘要文件。
  4. 上载键:Shift + Alt + u
  5. 下载键:Shift + Alt + d
  6. 键入同步以查看所有同步选项

它同步

  • 设定文件
  • 绑定文件
  • 启动文件
  • 片段文件夹
  • VSCode 扩展

详细文档来源

VSCode-设置同步博客文章

在此处下载:VS代码-设置同步-扩展名


1
谢谢Shan Khan-此扩展非常有用-我有一组虚拟服务器,需要在这些虚拟服务器之间同步VS Code设置和实例之间的键绑定,并且此扩展的功能与广告中所宣传的完全相同。
Bill_Stewart '16

尝试过但没有成功。当我通过Alt-Shift U激活它时,出现错误:extensionHost.ts:293 [Extension Host] {“ message”:“ Not Found”,“ documentation_url”:“ developer.github.com/v3 ”} A。 logExtensionHostMessage @ extensionHost.ts:293 messageService.ts:126Error登录到控制台(“帮助”菜单>“切换开发者工具”)。您可以使用高级设置命令中的“同步:未解决问题”来解决问题。e.doShow@ messageService.ts:126
Robin Coe

4
我很想接受这个答案,但是我尝试了该工具,发现它不可靠且有故障。非常简单的情况:VS Code安装在两台计算机上,我试图同时获取自动上传/下载设置和扩展名更改。由于无法正常工作,我最终放弃了。因此,好主意但需要更多工作。
马克·惠特克

2
我对将自己的设置发布到(半)公开Gist上感到百感交集。一些扩展在其设置中存储敏感数据(例如数据库登录名,SFTP登录名)。很难通过Syncthing或Resilio Sync之类的外部工具将存储重定向到“本地”文件吗?
korkman

1
@korkman用于处理这些情况,“设置同步”将允许在将来的更新中通过本地文件和git存储库(如gist)进行同步。
山汗

21

您可以从包含用户设置的目录到应用程序的同步目录(例如Dropbox或OneDrive)建立硬链接。

例如,在Windows上,用户设置位于中%APPDATA%\Code\User,因此您可以输入:

mklink /H /J X:\Your\Sync\Dir %APPDATA%\Code\User

在您的计算机上使用Visual Studio Code实现同步。

然后,在另一台计算机上,您可以删除该%APPDATA%\Code\User文件夹,然后键入:

mklink /H /J %APPDATA%\Code\User X:\Your\Sync\Dir

检索同步的设置。


嗨!我不明白为什么您需要从同步目录到%appdata%文件夹的链接。在同步目录(DropBox,OneDrive等)中为所有实际VS设置移动一次,然后在要同步设置的每台计算机上%APPDATA%\Code\User,使用mklink /H /J %APPDATA%\Code\User X:\Your\Sync\Dir
–MichaëlPolla

2
因为如果给定名称已经存在,您将无法创建链接,因此一旦下载了设置,同步目录将位于该目录中。
Ree先生

对于带有消息的网络驱动器,此操作将失败"Local NTFS volumes are required to complete the operation."
Amit Beckenstein

11

啊哈,你可以试试我的VSCode扩展:正在同步

希望你会喜欢。:)


快速指南

  1. 安装同步

  2. 拥有自己的GitHub Personal Access Token

    1. 登录到您的GitHub Settings页面。

      登录设置页面

    2. 选择Personal access tokens选项卡,然后单击确定Generate new token

      生成新令牌

    3. 选择gist并单击Generate token

      允许要点

    4. 复制并备份您的令牌。

      复制和备份令牌

  3. 同步您的设置:

    Syncing会询问必要的信息for the first timesave for later use

    1. 上载

      1. 键入uploadVSCode Command Palette

      2. 输入您的GitHub Personal Access Token

      3. 输入您的Gist ID(或leave it blank自动创建)。

      4. 做完了!

      5. 上传后,您可以Gist IDGitHub Gist中找到您的设置和相应的设置。

        设置和要点

    2. 资料下载

      1. 键入downloadVSCode Command Palette

      2. 输入您的GitHub Personal Access Token(或leave it blank如果您想从公共Gist下载)

      3. 输入您的Gist ID(或public Gist ID)。

      4. 做完了!


嗯 这似乎不同步我在参考VS Code安装中安装的扩展。我是否缺少某些功能,或者此功能超出了此工具的范围?
SeaDude

编辑:我必须运行Syncing: Download Settings2倍才能下载扩展。没什么大不了的,只是抬头。感谢您的杀手级工具!
SeaDude

1
我对将自己的设置发布到(半)公开Gist上感到百感交集。某些扩展在其设置中存储敏感数据(例如数据库登录名,SFTP登录名)。很难通过Syncthing或Resilio Sync之类的外部工具将存储重定向到“本地”文件吗?
korkman

@korkman目前尚不支持导出到本地存储,但是最好支持文件同步。
Nonoroazoro

9

在v1.45中,您似乎可以通过github登录到内置的“设置同步”,请参阅https://github.com/microsoft/vscode/issues/95160#event-3266867554(在设置同步中支持GitHub登录) )。以及v1.45发行说明


在v1.43中,预览功能(因此仅在Insiders's Build中)是设置sync。参见https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_43.md#settings-sync

设置同步

最近几个月,我们一直在努力支持跨计算机同步VS Code设置,扩展名和键盘快捷键(流行功能请求#2743)。在这个里程碑中,我们很高兴地宣布,此功能已准备好在我们的下一个1.44.0版本的内部发布程序中进行预览。现在,您可以在所有计算机上的所有VS Code安装中同步自定义设置。您还可以轻松地在新机器上使用个人自定义引导VS Code。以下视频演示了这一点:

支持在同步时检测设置和键绑定中的冲突。使用差异编辑器显示冲突,左侧的传入(云)更改和右侧的本地更改。您可以通过在右侧编辑器中进行编辑来解决冲突,并使用编辑器中提供的操作合并更改。

支持的功能

当前,设置,键盘快捷键,扩展名和显示语言已同步,但我们计划添加更多功能。您可以查看建议的设置同步功能列表。

默认情况下,机器设置(具有机器或机器可覆盖范围的机器)不同步。您还可以从设置编辑器或使用设置向此列表添加或删除所需的设置 sync.ignoredSettings

默认情况下,键盘快捷方式是按平台同步的。如果您的键盘快捷键与平台无关,则可以通过禁用设置在各个平台之间同步它们 sync.keybindingsPerPlatform

所有内置和已安装的扩展都与其全局启用状态同步。您可以从扩展程序视图或使用设置来跳过同步扩展程序 sync.ignoredExtensions

设置同步活动可以在日志(同步)输出视图中进行监视。在同步过程中进行更改时,所有本地自定义项都会在磁盘中备份最近30天(至少10天)。您可以使用命令同步:打开本地备份文件夹转到备份位置并保留旧的自定义设置。

(以及发行说明链接中的一些gif)

请注意,这是通过您的Microsoft帐户而不是github(直到v1.45-参见顶部)进行的:

设置同步使用Microsoft帐户存储您的VS Code定制以进行同步,因此您将需要一个帐户来使用它。有关更多信息和帮助,请参阅“ 设置同步”文档

另请参阅https://github.com/microsoft/vscode-docs/blob/vnext/docs/editor/settings-sync.md,了解有关设置的更多信息settings sync


还有指向设置同步的v1.44信息的链接:https : //github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_44.md#settings-sync


谢谢马克。到来时,我会很想尝试的。
Mark Whitaker

1
百万美元的问题是何时能稳定下来。1.46已经出局,但仍仅限内部人员使用:(
bviktor

6

我在Mac上通过将VS Code复制settings.json到我的iCloud驱动器以进行自动备份,然后创建了符号链接来做到这一点。

  1. settings.jsonVS代码设置目录 复制$HOME/Library/Application Support/Code/User/settings.json到备份位置
  2. settings.json通过重命名到旧版本settings-old.json
  3. 在终端中,cd对VS代码设置目录:cd ~/Library/Application\ Support/Code/User/
  4. 使用command创建指向备份文件的符号链接ln -sf path/to/backup/settings.json settings.json。由于我将其备份到iCloud并将文件重命名为vscode.settings.json,因此我的命令如下所示:ln -sf ~/Library/Mobile\ Documents/com~apple~CloudDocs/vscode.settings.json settings.json
  5. 检查是否可以在VS Code中打开用户首选项

要在其他Mac上使用备份,只需重复步骤2-5。

我也做了扩展 ...

cd ~/.vscode/
mkdir ~/Library/Mobile\ Documents/com~apple~CloudDocs/vscode/
cp -a extensions ~/Library/Mobile\ Documents/com~apple~CloudDocs/vscode
mv extensions extensions-old
ln -sf ~/Library/Mobile\ Documents/com~apple~CloudDocs/vscode/extensions extensions

@frankhommers看起来可以使用Window的symlink命令复制它mklink。您可以使用DropBox,OneDrive或其他云服务代替iCloud驱动器
Chris Feist

4

我将我放置settings.json在一个与git同步的配置文件中(尽管Dropbox也可以工作),并使用Python脚本将其符号链接到每个平台的正确位置,以便从设置菜单中对其进行更新以在我的机器上同步。创建符号链接需要Windows上的管理员权限。

import os
import platform

# Find the settings file in the same directory as this script
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
VS_SETTINGS_SRC_PATH = os.path.join(SCRIPT_DIR, 'settings.json')

# https://code.visualstudio.com/docs/getstarted/settings#_settings-file-locations
if platform.system() == 'Windows':
    VS_SETTINGS_DST_PATH = os.path.expandvars(r"%APPDATA%\Code\User\settings.json")
elif platform.system() == "Darwin":
    VS_SETTINGS_DST_PATH = os.path.expandvars(r"$HOME/Library/Application Support/Code/User/settings.json")
elif platform.system() == "Linux":
    raise NotImplementedError()
else:
    raise NotImplementedError()

# On Windows, there might be a symlink pointing to a different file
# Always remove symlinks
if os.path.islink(VS_SETTINGS_DST_PATH):
    os.remove(VS_SETTINGS_DST_PATH)

choice = input('symlink %r -> %r ? (y/n) ' % (VS_SETTINGS_SRC_PATH, VS_SETTINGS_DST_PATH))
if choice == 'y':
    os.symlink(VS_SETTINGS_SRC_PATH, VS_SETTINGS_DST_PATH)
    print('Done')
else:
    print('aborted')

3

用户设置

当前在Visual Studio Code中没有针对用户设置的自动同步。在Windows上,用户设置位于中%APPDATA%\Code\User\settings.json。您可以将该文件的副本保存在OneDrive或Dropbox上,然后在所有计算机上将其移动到用户设置文件夹。但这仍然包括每次更改配置时每台计算机上的手动步骤。

您可以在此处建议自动同步设置:https : //visualstudio.uservoice.com/forums/293070-visual-studio-code

工作区设置

.vscode工作空间的文件夹添加到版本控制系统(Git / SVN等)中。当您从存储库中签出代码时,您将自动获得VS Code工作区设置。


感谢您的答复,但您误解了这个问题。我问的是用户设置,而不是项目设置。我对这个问题做了一些澄清。
马克·惠特克

1
谢谢,我改进了答案
德沃斯

3

做到这一点的另一种方法是软链接文件,这些文件也可以存储在GitHub上的存储库中。例如,在Mac OS上,假设您有一个名为的目录~/dev/dotfiles/vscode。假设其中有两个文件,分别为settings.jsonkeybindings.json。您可以通过以下方式将这些文件进行软链接:

ln -s ~/dev/dotfiles/vscode/keybindings.json ~/Library/Application\ Support/Code/User/keybindings.json
ln -s ~/dev/dotfiles/vscode/settings.json ~/Library/Application\ Support/Code/User/settings.json

如果您使用的是Windows或Linux,则可以在https://code.visualstudio.com/docs/getstarted/settings#_settings-file-locations找到相应设置目录的路径。


2

最终,这是一个内置功能:请参见Visual Studio Code中的“设置同步”

注意:从2020年5月的1.46版开始,同步当前处于预览状态


2
虽然仍在预览中
弗兰克·富

@FrankFu好吧,但这是一个很大的功能,而且他们正在取得进展:您能够同步到microsoft / github帐户,并且有一个建议的用于帐户登录的api等。(这对于像我们这样的其他扩展很有用github btw)
Chayim Friedman

@ChayimFriedman,哦,百分百,我无意抱怨。我觉得有必要清除它,以免给人们错误的希望,因为原始的未经编辑的答案没有其他说明。
弗兰克·富

@FrankFu哦,很好。抱歉。
Chayim Friedman

-7

使用工作区设置而不是用户设置。


这不是建设性的建议,因为工作空间设置不会在项目或系统之间同步。
Itanex '18年

2
给予@ColacX疑点的利益,我假设什么意思是,如果你使用的工作空间的设置,你可以将它们保存在混帐/ SVN /等等,这确实在事实上同步他们的感觉。
Joshua Sleeper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.