唯一可靠方式是运行code --list-extensions导出纯文本插件id列表(如ms-python.python),每行一个、无版本号、无bom、不含禁用插件;禁用插件不出现是设计行为,非bug;加--show-versions会导致安装报错,不可用。

怎么导出插件列表才不会丢 ID 或带错格式
直接从扩展面板复制名称或截图,100%会出错——VS Code 安装依赖的是插件 ID(如 ms-python.python),不是显示名。唯一可靠方式是命令行导出。
-
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?先在 VS Code 里按Ctrl+Shift+P运行Shell Command: Install 'code' command in PATH
settings.json 导入后不生效?大概率是路径或 Profile 结构炸了
直接覆盖 settings.json 是最常见翻车点。VS Code 1.86+ 引入 Profile 后,它的结构已变成嵌套对象,粗暴覆盖会删掉 profiles 根节点,导致整个 Profile 失效。
- 正确做法:在目标机先进入
设置 → 配置文件 → 选中目标 Profile → … → Reset Profile to Default,再把源机settings.json中对应 Profile 下的全部内容(比如"my-dev": { ... })粘贴进去 -
python.defaultInterpreterPath、files.exclude这类含绝对路径的字段必须删掉或替换成占位符,否则 Python 插件一启动就报错,且不会自动降级或提示 - 改完保存后,必须 完全退出 VS Code 再重启——仅靠
Developer: Reload Window不触发 Profile 重解析
keybindings.json 和 snippets 怎么导出导入才不漏
Settings Sync 和插件列表命令完全不管快捷键和代码片段。它们是独立文件,路径固定,但极易被忽略。
-
keybindings.json路径:Windows 是%APPDATA%\Code\User\keybindings.json,macOS 是$HOME/Library/Application Support/Code/User/keybindings.json -
snippets/是整个目录,不是单个文件;里面每个*.json对应一类语言的代码片段,漏掉一个目录就少一堆常用模板 - 这两个文件热重载生效,改完不用重启,但首次复制后仍建议重启一次确认加载无误
- 别指望 Settings Sync 自动同步它们——它只同步
settings.json和keybindings.json(前提是开启),但snippets/永远不在同步范围内
为什么 Settings Sync 不适合环境迁移
它适合轻量日常同步,但做环境迁移就是自找麻烦:同步成功 ≠ 配置可用,很多东西根本不同步,或者同步了也跑不起来。
- 不同步禁用插件状态、不处理跨平台路径(比如 Windows 的
C:\Python39\同步到 macOS 直接罢工)、不导出state.vscdb(UI 状态如侧边栏展开项)、不包含多根工作区下的.vscode/settings.json - 插件更新后配置项可能废弃,同步过来的旧配置反而引发冲突或报错
- 同步失败时日志藏得深,
Sync: Show Output里搜Installing extension才能定位卡在哪一步;Ubuntu/WSL 常卡在Getting extensions list,八成是代理没透传给 VS Code -
sync.ignore是 Settings Sync 插件自己的配置项,必须写在全局settings.json里才生效,写在工作区或用户 UI 设置里无效
snippets/ 目录、禁用插件状态——这些都不是“导出再导入”就能自动解决的点,而是需要你主动识别、手动清理、分层覆盖。自动化脚本能省力,但绕不开对配置逻辑的理解。











