code --list-extensions 是唯一可信的扩展导出命令,输出 publisher.name 格式 id(如 ms-python.python),每行一个、纯文本、不含禁用插件;导入需逐行执行 code --install-extension,推荐加 --force 参数并配合 timeout 或 try/catch 处理网络卡顿。

code --list-extensions 是唯一能信的导出命令
别截图、别复制扩展面板里看到的“Python”“Prettier”,那些只是显示名,不是真实 ID。执行 code --list-extensions 才能得到可直接安装的 publisher.name 格式 ID(如 ms-python.python),每行一个、纯文本、无 BOM、不含禁用插件——这是设计行为,不是遗漏。
常见错误现象:code --list-extensions 报 command not found,本质是 VSCode 命令行工具没进 PATH。macOS/Linux:Cmd+Shift+P → 输入 Shell Command: Install 'code' command in PATH;Windows:同样操作,但若用非默认路径安装,需手动确认 code 是否在环境变量中。
- 导出到文件:运行
code --list-extensions > extensions.txt,生成可传、可 Git 提交的清单 - 别加
--show-versions:输出形如ms-python.python@2024.12.1的字符串,code --install-extension会直接报错Extension 'xxx@yyy' not found - 禁用插件天然不出现——重装时你本就不需要它们,不用额外处理
导入必须逐行调用 code --install-extension
VSCode 没有 --batch、-f 或类似批量导入参数。所谓“一键安装”,底层全是循环调用单个 code --install-extension。脚本写错或网络卡住,整个流程就停在那。
Linux/macOS 推荐用:cat extensions.txt | xargs -L 1 code --install-extension --force
PowerShell 推荐用:Get-Content extensions.txt | ForEach-Object { code --install-extension $_ --force }
-
--force很关键:跳过“已存在”提示,否则遇到同名插件会中断 - 网络不稳定时,单个插件可能卡死:Linux/macOS 可加
timeout 120;PowerShell 需自己加try/catch避免中断 - 部分插件(如 Python、Rust)依赖本地 runtime,先装好 Python 或 rustc,再跑安装脚本,否则静默失败
settings.json 和 keybindings.json 必须单独处理
code --list-extensions 不动 settings.json 里的任何内容,也不碰快捷键。settings.json 里含绝对路径(如 python.defaultInterpreterPath、files.exclude)会导致插件启动失败;keybindings.json 则必须手动复制,Settings Sync 在离线或跨平台时经常漏掉自定义键位。
- settings.json 路径:
Windows:%APPDATA%\Code\User\settings.json
macOS:~/Library/Application Support/Code/User/settings.json
Linux:~/.config/Code/User/settings.json - keybindings.json 路径同上,改完即热重载,无需重启
- Profile 结构(VSCode 1.86+)要小心:直接覆盖
settings.json会破坏profiles字段,应只合并目标 Profile 下的配置块
离线迁移时最容易翻车的三个点
插件全装上了,环境却起不来,问题往往不在插件本身,而在路径、版本和 Profile 结构。
- extensions.txt 里没版本号 → 同一插件在 VSCode 1.85 和 1.90 上行为可能不一致,真要复现,得靠
--force+ 统一 VSCode 主版本 - settings.json 里留着旧机器的绝对路径 → Python 插件找不到解释器,文件资源管理器异常折叠,删掉或替换成占位符再覆盖
- keybindings.json 里用了
ctrl却没加when条件 → macOS 上失效,建议用"when": "editorTextFocus && !isMac"显式适配











