最可靠方式是导出settings.json和extensions.txt;需从系统路径定位settings.json,清理绝对路径与平台字段后覆盖,并用命令行批量安装插件,Settings Sync因路径错乱、禁用插件丢失等问题不适合环境迁移。

导出 settings.json 和 extensions.txt 是最可靠起点
VSCode 没有“导出配置”按钮,所谓导出,本质是提取两个核心文件:用户设置 settings.json 和已安装扩展清单 extensions.txt。其他文件(如 keybindings.json、snippets/)属于可选补充项,但漏掉它们会导致快捷键失效或代码片段丢失。
操作上别依赖 UI 复制 JSON 内容——容易格式错乱或漏掉注释。正确做法是直接定位文件系统路径:
- Windows:
%APPDATA%CodeUsersettings.json - macOS:
$HOME/Library/Application Support/Code/User/settings.json - Linux:
$HOME/.config/Code/User/settings.json
扩展列表必须用命令行生成:code --list-extensions > extensions.txt。注意加 --show-versions(即 code --list-extensions --show-versions > extensions.txt)能保留版本号,避免新环境装错旧版插件引发兼容问题。
导入时 settings.json 覆盖失败的常见原因
把 settings.json 直接拖进 VSCode 窗口或用编辑器覆盖保存,大概率不生效。VSCode 启动时会校验 JSON 格式,且部分编辑器(尤其是 Windows 记事本)会偷偷加 BOM 或用 CRLF 换行,导致解析失败后静默回退到默认值。
务必按以下顺序操作:
- 完全退出 VSCode(任务管理器里确认没有残留
Code Helper进程) - 删除目标机器上原有的
settings.json,不要覆盖,而是替换 - 用 VS Code、Sublime 或 Vim 等无 BOM 编辑器打开备份的
settings.json,确认末尾无多余逗号、引号闭合正确、无中文全角符号 - 粘贴到新路径后,重启 VSCode,再打开命令面板运行
Preferences: Open Settings (JSON)确认内容已加载
如果看到设置没变,大概率是文件路径错了,或 VSCode 正在使用 Remote-SSH/WSL 环境——此时要同步的是远程机器上的 ~/.vscode-server/data/Machine/settings.json,不是本地路径。
批量安装扩展必须用命令行,不能靠拖文件
extensions.txt 只是文本列表,VSCode 不会自动读取它。手动一个个点安装不仅慢,还容易漏掉禁用的插件或版本不一致的扩展。
不同系统执行方式不同,但核心逻辑一致:逐行读取 ID 并调用 code --install-extension:
- macOS/Linux:
cat extensions.txt | xargs -L 1 code --install-extension - Windows PowerShell:
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ } - Windows CMD(不推荐):
for /f %i in (extensions.txt) do code --install-extension %i
安装过程无提示、无报错反馈,装完后打开 Extensions 视图,输入 @installed 查看数量是否与 extensions.txt 行数一致。若不一致,说明某扩展因网络、权限或平台限制安装失败,需单独重试。
Settings Sync 不适合换电脑迁移
官方 Settings Sync 功能(通过 GitHub 或 Microsoft 账户)看似方便,但实际在环境迁移场景下可靠性低。它会跳过含本地路径的设置(如 python.defaultInterpreterPath)、忽略敏感字段(如 http.proxy)、且无法处理禁用状态或插件特有配置(如 Prettier 的 prettier.configPath)。
更关键的是:同步开启后,settings.json 会被标记为只读,所有修改必须走 UI 或命令面板触发写入;一旦网络中断或同步冲突,合并逻辑不可控,可能覆盖你手动调整的关键项。
如果你已在旧机启用 Sync,迁移前建议先关闭它(命令面板输入 Preferences: Turn off Settings Sync),再手动导出,否则你拿到的 settings.json 可能只是“本地覆盖层”,而非全量配置。
真正容易被忽略的是路径硬编码和插件激活时机——比如 files.exclude 里写了 "C:\Projects\myapp",迁移到 macOS 就会失效;又比如 ESLint 插件首次启动时会自动生成 eslint.workingDirectories,覆盖你手动写的设置。这些细节不清理,配置就只是看起来一样。











