code --list-extensions可导出已启用扩展id列表,纯文本格式;需先配置path,支持--show-versions加版本号;安装需逐个执行code --install-extension,不支持批量导入。

导出已安装插件列表用 code --list-extensions
VSCode 自带命令行工具,不用装额外插件就能一键拉出所有已启用扩展的 ID 列表。这个列表是纯文本、每行一个 publisher.name 格式,直接可存档或传给新机器。
常见错误现象:运行 code --list-extensions 报错“command not found”,其实是 VSCode 命令行工具没添加到系统 PATH —— macOS/Linux 需在 VSCode 界面里按 Cmd+Shift+P(Mac)或 Ctrl+Shift+P(Win/Linux),输入 “Shell Command: Install 'code' command in PATH”,回车执行;Windows 用户如果用的是非默认安装路径,也可能需要手动检查 code 是否在环境变量中。
实操建议:
- 导出为文件:运行
code --list-extensions > extensions.txt,生成可读可传的清单 - 只导出已启用的(默认行为),禁用的插件不会出现在结果里
- 加
--show-versions参数可附带版本号:code --list-extensions --show-versions > extensions-with-ver.txt,对调试兼容性问题有帮助
在新设备上批量安装扩展用 code --install-extension
有了 extensions.txt,就可以用脚本循环安装。VSCode 不支持直接导入整个文件,必须逐个调用 code --install-extension,否则会失败。
使用场景:重装系统、换电脑、CI 环境初始化。注意该命令默认会等待每个扩展安装完成才执行下一个,网络慢时可能卡住;部分扩展(如含 native 依赖的)需先装好对应 runtime(比如 Python 扩展依赖本地 Python)。
实操建议:
- Linux/macOS 终端一行搞定:
cat extensions.txt | xargs -L 1 code --install-extension - Windows PowerShell:
Get-Content extensions.txt | ForEach-Object { code --install-extension $_ } - 加
--force可跳过“已存在”提示,避免中断;但慎用,它会覆盖已修改配置的扩展 - 遇到某扩展安装失败(比如网络超时或权限问题),命令会停在那,建议加
|| true(Linux/macOS)或忽略错误(PowerShell 中用try/catch)让流程继续
为什么不用 settings.json 备份扩展?
settings.json 里确实有 extensions.ignoreRecommendations 或 extensions.autoUpdate 这类配置,但它**不记录你装了哪些扩展**。VSCode 不把已安装扩展写进用户配置文件,这是设计使然 —— 扩展状态属于“运行时数据”,和主题、快捷键这类用户偏好不同。
容易踩的坑:有人误以为同步开启后(通过 GitHub 账户登录)就能自动恢复所有插件,其实同步只管 settings.json、键盘映射、代码片段等,扩展仍需手动触发安装。即使开了 Settings Sync,首次登录新设备时,VSCode 会提示“发现 23 个推荐扩展”,但不会自动装你原来那 47 个。
性能影响:扩展太多(>80 个)且含大型语言服务(如 ms-python.python、ms-vscode.cpptools)时,批量安装耗时明显,建议分批或挑核心先装。
离线环境怎么恢复扩展?
没有网络时,code --install-extension 会失败。这时得提前下载 .vsix 文件 —— 每个扩展页面(marketplace.visualstudio.com)右上角都有 “Download Extension” 按钮,保存下来就是可离线安装的包。
实操建议:
- 用
code --install-extension /path/to/xxx.vsix安装本地包,路径必须是绝对路径(相对路径容易报错) - VSIX 文件名不含版本信息,建议重命名为
ms-python.python-2024.2.0.vsix这类格式,避免混淆 - 有些扩展(如
esbenp.prettier-vscode)依赖其他扩展,离线安装前得手动理清依赖顺序,否则启用时报错“extension is not installed”
真正麻烦的不是导出或安装,而是扩展之间的隐式依赖和版本漂移 —— 比如某个项目要求 rust-lang.rust v0.7.x,但最新版已是 v0.8,强行降级可能触发 VSCode 内部校验失败。这种细节,清单里根本看不出来。











