VSCode不支持直接导出配置,可靠迁移仅限插件ID列表、settings.json、keybindings.json和snippets目录;需清理绝对路径、重置Profile后粘贴配置、手动添加语言包ID,并彻底重启生效。

VSCode 本身不支持“导出配置”这个操作——你看到的所谓导出功能,基本都是第三方插件或手动操作的错觉。真正能稳定迁移的只有四类东西:插件 ID 列表、用户设置(settings.json)、快捷键(keybindings.json)、代码片段(snippets/ 目录)。其他所谓“配置导出”,比如插件自身的设置、语言服务器参数、Profile 结构,全得靠人肉处理。
为什么直接复制 settings.json 会报错
常见报错如 Extension 'xxx' not found 或启动时 Python 解释器路径失效,根本原因就两个:
-
settings.json里混着绝对路径(比如"python.defaultInterpreterPath": "C:\Users\old\AppData\Local\Programs\Python\Python311\python.exe"),新机器上根本不存在 - 启用了 Profile(VSCode 1.86+ 默认开启),但
settings.json已变成嵌套结构:"profiles": { "my-dev": { ... } },直接覆盖会删掉profiles根节点,导致 Profile 识别失败 - 某些插件(如 ESLint、Prettier)的配置依赖工作区上下文,单独导出后在新环境缺少
.eslintrc.js或prettier.config.js就会触发校验失败
code --list-extensions 是唯一可信的插件导出方式
扩展面板里显示的“Python”“ESLint”只是 UI 名,安装实际靠的是 ID,比如 ms-python.python。截图、右键复制、手动打字都容易出错,尤其遇到带空格或 Unicode 字符的插件名时。
正确做法是打开终端执行:
code --list-extensions > extensions.txt
这会生成纯文本列表,每行一个 ID,无 BOM、无版本号、不依赖网络。注意:
- 加
--show-versions会输出ms-python.python@2024.12.1,但code --install-extension完全不认带@的格式,直接报错 - 禁用的插件不会出现在结果里——这是设计行为,不是 bug
- 中文界面必须额外加上语言包 ID:
MS-CEINTL.vscode-language-pack-zh-hans,否则配置全对也 fallback 到英文
Profile 迁移必须重置再粘贴
不能直接覆盖 settings.json。正确流程是:
- 在目标机器上,打开 VSCode → 设置 → Profiles → 选中你要还原的 Profile(如
my-dev)→ 点击 Reset Profile to Default - 然后把源机器对应 Profile 下的配置内容(即
"my-dev": { ... }里面的对象)粘贴进弹出的编辑框 - 保存后,必须彻底关闭所有 VSCode 进程(包括后台的
Code Helper),再重新打开——仅Developer: Reload Window不会触发 Profile 重解析
最容易被忽略的是:迁移后必须手动验证语言包是否启用、绝对路径是否清理、以及插件是否真的按 ID 装上了——VSCode 不会主动提醒你少装了一个 vscodevim.vim,它只会让快捷键突然失灵。











