VSCode插件配置无法直接导出,可靠迁移需导出启用插件列表(code --list-extensions)、用户级设置(注意Profile结构与路径替换)及快捷键/代码片段(手动复制keybindings.json与snippets目录)。

直接导出插件配置是不可能的——VSCode 不把“插件配置”单独存成一个可导出的文件,它分散在 settings.json、插件自身状态、以及部分运行时数据库里。真正能可靠迁移的是「已启用插件列表 + 用户级设置 + 快捷键」这三样东西。
为什么 code --list-extensions 是唯一可信的导出方式
扩展面板里看到的“Python”“ESLint”只是显示名,安装和同步依赖的是 ID(如 ms-python.python)。手动复制名称、截图、或从 UI 里点右键“复制 ID”都容易出错,尤其含空格或特殊字符时。
-
code --list-extensions输出纯文本、每行一个 ID,格式统一、无 BOM、不带版本号,适合跨平台传输 - 加
--show-versions虽然能输出ms-python.python@2024.12.1,但code --install-extension不认带@的格式,会报错Extension 'xxx@yyy' not found - 禁用的插件不会出现在结果里——这是设计行为,不是 bug;真要记录禁用状态,得进
~/.vscode/extensions/手动ls,但重装时基本不需要 - Windows CMD 下若提示
command not found,先确认是否执行过Shell Command: Install 'code' command in PATH
导入时别直接覆盖 settings.json,小心 Profile 结构损坏
VSCode 1.86+ 的 Profile 功能让 settings.json 变成嵌套结构,比如包含 "profiles": { "my-dev": { ... } }。直接全量覆盖会删掉 profiles 根对象,导致 Profile 无法识别。
- 正确做法:先在目标机进入 设置 → Profiles → 选中目标 Profile → … → Reset Profile to Default
- 再打开新机器的
settings.json,找到profiles字段,把源机对应 Profile 下的全部键值(如"my-dev"内容)粘贴进去 - 路径检查不能少:
python.defaultInterpreterPath、files.exclude这类含绝对路径的字段,必须删掉或替换成占位符,否则 Python 插件一启动就报错 - 改完保存后,必须重启 VSCode —— 仅靠 Developer: Reload Window 不触发 Profile 配置重解析
keybindings.json 和 snippets 文件必须手动复制
Settings Sync 或插件列表命令完全不碰快捷键和代码片段。它们是独立文件,路径固定,且热重载生效(keybindings.json 改完不用重启)。
-
keybindings.json路径:
Windows:%APPDATA%\Code\User\keybindings.json
macOS:$HOME/Library/Application Support/Code/User/keybindings.json
Linux:$HOME/.config/Code/User/keybindings.json -
snippets是个目录,不是单个文件,需整个复制过去;里面每个.code-snippets文件对应一种语言片段 - 如果快捷键没反应,90% 是因为
keybindings.json没覆盖成功,或权限被系统拦截(尤其是 macOS 上的 Full Disk Access 限制) - 含平台敏感键(如
ctrlvscmd)的绑定,建议加when条件表达式,例如"when": "isMac || isWindows"
离线安装插件卡住?不是网络问题,是默认行为在等校验
code --install-extension 默认会联网校验签名、检查更新、甚至下载 native 二进制模块。离线环境里它不会报错,而是静默卡死在等待状态。
- 必须加
--force参数跳过“已存在”提示,避免因旧版本残留中断流程 - Linux/macOS 推荐加
timeout 120控制单个安装时长:while read ext; do timeout 120 code --install-extension "$ext" --force; done - PowerShell 中用
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ --force },但要提前关掉extensions.autoCheckUpdates - 含 native 代码的插件(如
ms-vscode.cpptools)要求目标机 Node.js 版本匹配 VSCode 内置版本,否则日志显示Installation completed,但插件实际不加载
最常被忽略的不是怎么导出,而是哪些字段导了也白导:比如 python.defaultInterpreterPath 这种硬编码路径,或者 remote.SSH.configFile 这类依赖本地 SSH 配置的项。它们必须人工清理或移到工作区配置里,否则迁移后第一眼看着成功,第二步就崩。


















