真正可靠的是手动导出 settings.json、keybindings.json 和 snippets 目录,配合 extensions.txt 插件列表与脚本恢复;settings sync 和 .code-profile 均存在禁用插件丢失、路径不兼容、ui 状态不保存、无法脚本化等缺陷。

别用 Settings Sync 做环境迁移——它不处理禁用插件、不兼容跨平台路径、同步失败时难排查,且 UI 布局和主题常丢。真正可靠的是手动导出 + 脚本恢复。
导出 settings.json、keybindings.json 和 snippets 目录
VSCode 的用户级配置全在这三个地方:settings.json(所有设置)、keybindings.json(快捷键)、snippets/(代码片段)。只导出 settings.json 是常见错误,keybindings.json 一旦漏掉,你改过的 Ctrl+P 行为或自定义 Emmet 快捷键就全没了。
- Windows 路径:
%APPDATA%\Code\User\ - macOS 路径:
$HOME/Library/Application Support/Code/User/ - Linux 路径:
$HOME/.config/Code/User/
注意:settings.json 里可能含绝对路径(比如 "python.defaultInterpreterPath"),迁移前建议手动删掉或替换成占位符,否则新机器上 Python 插件会报错。
用 code --list-extensions 导出插件列表
命令行导出比在扩展面板里截图或手抄靠谱得多,且输出格式(ms-python.python)正好匹配安装命令。没装 CLI 工具?先按 Ctrl+Shift+P → 输入 Shell Command: Install 'code' command in PATH 回车启用。
- 基础导出:
code --list-extensions > extensions.txt - 带版本号(适合 CI 或团队统一):
code --list-extensions --show-versions > extensions.txt - 禁用的插件不会出现在列表里——这是预期行为,不用强求导出全部;真要记录,得进
~/.vscode/extensions/手动 ls,但重装时基本不需要
在新机器上批量安装插件并覆盖配置
复制文件是体力活,但安装插件容易翻车:直接 cat extensions.txt | xargs code --install-extension 在 macOS/Linux 上可行,Windows PowerShell 得换行处理,否则会把整行当一个插件名。
- macOS/Linux:
cat extensions.txt | xargs -L 1 code --install-extension - Windows PowerShell:
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ } - 配置文件复制后必须重启 VSCode 才生效;如果快捷键没反应,大概率是
keybindings.json没覆盖成功,检查目标目录权限
为什么不要依赖 .code-profile 导入导出
VSCode 1.86+ 加入的 .code-profile 文件(通过「设置 → 配置文件 → 导出」生成)看似方便,但它只打包当前激活的配置文件,不包含禁用插件状态、不导出 state.vscdb(UI 状态如侧边栏展开项)、也不处理多根工作区下的 .vscode/settings.json。更关键的是,它无法被脚本化——你不能用命令行自动导入,只能靠 UI 点击,没法集成到自动化部署流程里。
真正需要“一键复现开发环境”的人,最终都会回到 settings.json + extensions.txt + 脚本这条路径。复杂点在于路径替换和插件版本控制,但可控;而 Settings Sync 或 .code-profile 的不可控,往往在换电脑第三天才暴露出来。











