vscode用户配置和插件需手动导出settings.json与code --list-extensions结果,清理绝对路径后覆盖新机对应目录,并脚本安装插件;settings sync因跨平台兼容性差、依赖网络且不处理禁用状态/主题/插件特有配置,不适合环境迁移。

导出当前 VSCode 用户配置和插件列表
VSCode 本身不提供一键打包导出功能,但用户设置(settings.json)和已安装插件都能通过命令行或文件系统直接提取。核心是区分「全局用户配置」和「工作区配置」——导出时只关心前者。
常见错误现象:settings.json 手动复制后导入失效,往往是因为混入了工作区路径、机器相关路径(如 "python.defaultInterpreterPath"),或启用了同步但没关掉自动覆盖。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),输入并运行Preferences: Open Settings (JSON),复制全部内容保存为settings.json - 终端执行
code --list-extensions,重定向输出:code --list-extensions > extensions.txt - 检查
settings.json中是否含绝对路径字段(如"files.exclude"、"python.condaPath"),删掉或改成相对/通用值
在新机器上批量安装插件并还原配置
插件必须逐个安装,但可脚本化;配置文件直接覆盖即可生效,前提是 VSCode 已退出。别指望粘贴完 settings.json 就立刻看到效果——部分设置需重启或重载窗口。
使用场景:重装系统、换电脑、CI 环境预配开发环境。
- 确保新机器已安装同版本 VSCode(插件兼容性常卡在主版本号,比如 1.85 和 1.86 插件行为可能不同)
- 运行
cat extensions.txt | xargs -I {} code --install-extension {}(macOS/Linux);Windows PowerShell 用Get-Content extensions.txt | ForEach-Object { code --install-extension $_ } - 把备份的
settings.json覆盖到新机器的用户配置目录:
— Windows:%APPDATA%\Code\User\settings.json
— macOS:$HOME/Library/Application Support/Code/User/settings.json
— Linux:$HOME/.config/Code/User/settings.json
为什么不用 VSCode 内置的 Settings Sync?
Settings Sync 依赖 GitHub 或 Microsoft 账户,看似方便,但实际踩坑率高:插件更新后配置项废弃、跨平台路径硬编码导致报错、同步冲突时手动合并困难。它适合轻量日常同步,不适合环境迁移或团队标准化。
性能影响:开启 Sync 后每次启动会拉取远程配置,网络差时明显卡顿;插件列表也按需下载,而非批量静默安装。
- Sync 会同步
keybindings.json和snippets/,但这些极少需要迁移,反而增加冲突概率 - 某些插件(如
ms-python.python)的配置项在新版中被重命名(如python.linting.enabled→python.linting.*),Sync 不做兼容转换 - 企业内网或离线环境无法使用 Sync,必须走文件导出/导入流程
插件导出时容易漏掉的三个东西
只跑 code --list-extensions 是不够的——它不包含禁用状态、插件特定配置、以及主题/图标包的启用状态。这些信息分散在多个文件里,不一并处理,导入后界面和行为会“似是而非”。
-
extensions.txt只记录 ID,不记录是否禁用;需额外导出disabled_extensions.json(路径同settings.json目录) - 当前启用的主题和图标包写在
settings.json里,字段名是"workbench.colorTheme"和"workbench.iconTheme",但很多人导出时没注意保留 - 插件自己的配置(如
prettier.configPath)藏在settings.json里,一旦漏掉,格式化等功能就失灵
真正可靠的迁移,不是“导出插件+导出设置”,而是把整个 User/ 目录打个包(排除 globalStorage/ 这种缓存目录)。复杂点在于得手动剔除机器绑定项,但省去了后期反复调试的麻烦。











