正确写法是用 code --list-extensions 导出插件id列表,再逐行生成 code --install-extension 命令;需注意windows powershell与macos/linux shell语法差异,推荐先导出为纯文本再用python等跨平台处理;插件id须准确(如ms-python.python),私有插件和弃用插件需人工处理,建议加--force并验证脚本在干净环境下的闭环安装能力。

vscode插件导出命令行安装脚本的正确写法
直接用 code --list-extensions 获取已安装插件列表,再逐行拼成 code --install-extension 命令即可生成可执行脚本。别用图形界面导出或手动复制,那没法复现。
Windows 和 macOS/Linux 的导出命令差异
Windows(PowerShell)和类 Unix 系统在换行、引号、转义上处理不同,直接套用会失败。
- Windows PowerShell:用
code --list-extensions | ForEach-Object { "code --install-extension $_" },保存为.ps1后需先运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser才能执行 - macOS/Linux:
code --list-extensions | xargs -I {} echo "code --install-extension {}" > install-ext.sh,然后chmod +x install-ext.sh - 统一稳妥方案(跨平台):用
code --list-extensions > extensions.txt导出纯文本,再用任意语言(如 Python 或 sed)生成脚本,避免 shell 差异干扰
哪些插件名不能直接安装?常见坑点
部分插件 ID 不等于市场显示名,code --list-extensions 输出的是真实 ID(如 ms-python.python),但有人误抄成 Python 或 python,导致 code --install-extension 报错 Extension 'xxx' not found.
- ID 中含空格或特殊字符的插件极少,但一旦有,
code --list-extensions仍输出合法 ID,无需额外转义 - 私有插件(如内部开发的
myorg.myext)若未发布到官方市场,code --install-extension会失败,脚本里得人工标注或跳过 - 依赖网络的插件(如某些 LSP 客户端)可能因源站不可达而卡住,建议加
--force参数避免交互中断:code --install-extension ms-python.python --force
生成脚本后怎么验证它真能跑通
别只看脚本有没有语法错误,重点是验证安装逻辑是否闭环:能否跳过已存在插件、是否容忍临时网络抖动、是否保留用户配置优先级。
- 先清空一个干净 VSCode 用户数据目录(如
~/.vscode-test),用脚本重装,观察日志里有没有already installed或Failed to install -
code --install-extension默认不覆盖已安装版本,所以重复执行安全;但不会自动升级,旧版插件可能引发兼容问题 - 如果脚本里混入了已被弃用的插件(如
donjayamanne.python),VS Code 8+ 会静默失败,建议定期用code --list-extensions --show-versions检查版本号再比对市场状态
ms-python.python 却没装 ms-toolsai.jupyter,某些功能就打不开。脚本只管装,不管配。











