直接复制.vscode/extensions文件夹会失效,因其是vscode启动后生成的运行时产物,含平台特定二进制模块,跨系统迁移将导致崩溃、图标灰显、配置空白;正确导出需用code --list-extensions --show-versions,安装须逐行执行code --install-extension "$ext" --force。

直接复制.vscode/extensions文件夹会失效
不能直接把 .vscode/extensions 文件夹打包带走,它不是插件的“源码包”,而是 VSCode 启动后解压、编译、链接生成的运行时产物。Windows 上装的 ms-python.python 插件,其 native 二进制模块(比如 LSP server)是 x64 + Windows ABI 编译的;挪到 macOS 或 ARM64 Linux 上,连 Cannot find module './extension' 都报不出来——进程直接崩溃,UI 里插件图标消失、设置页空白。
常见错误现象:
- 插件列表显示已安装,但图标灰掉、右键无菜单
- 打开设置页,插件配置区域一片空白
- 终端执行
code --list-extensions能列出 ID,但code --show-versions报错或不返回版本
导出插件列表必须带 --show-versions
只运行 code --list-extensions > extensions.txt 会丢掉版本号,恢复时可能装上不兼容的新版。比如项目依赖 esbenp.prettier-vscode@12.0.0,但新版 @13.1.0 移除了某个 formatter API,保存时格式化直接静默失败。
正确做法:
- 确保
code命令在 PATH 中:macOS/Linux 运行命令面板 → Shell Command: Install 'code' command in PATH;Windows 检查安装路径是否加入环境变量 - 导出命令必须加
--show-versions:code --list-extensions --show-versions > extensions-with-ver.txt - 文件保存为 UTF-8 编码,否则含中文 publisher 名(如
huizhouyao.vscode-chinese)会乱码 - Windows CMD 用户注意:重定向用
>,别写成>>,否则多次导出会混入旧记录
批量安装必须逐行执行 + --force
code --install-extension 不支持空格分隔多个 ID,也不接受 -f 或 --batch 参数。网上流传的 cat extensions.txt | xargs -I {} code --install-extension {} 在遇到 my-org.my plugin 这类含空格的 ID 时会拆成两个参数,直接报错。
推荐执行方式:
- Linux/macOS:
while IFS= read -r ext; do timeout 120 code --install-extension "$ext" --force || true; done - PowerShell(Windows):
Get-Content extensions-with-ver.txt | ForEach-Object { code --install-extension $_ --force } - 务必加
--force:跳过 “Extension ‘xxx’ is already installed” 提示,防止流程中断 - 务必提前关闭 VSCode:运行中会锁住插件注册表,部分插件安装后不生效,重启也无效
Local History 的备份不在 Settings Sync 范围内
VSCode 自带的 Settings Sync 只同步 settings.json、快捷键、代码片段和插件 ID 列表,它完全不管 Local History 自动生成的 .history 文件夹。这个文件夹默认建在项目根目录下,内容是纯文本快照,但路径、命名、保留策略全由插件控制,不会上传、不会跨设备同步。
如果你靠 Local History 防误删,临时备份方案只有两个选择:
- 手动复制整个项目目录(含
.history),适用于短期迁移或紧急恢复 - 改插件设置,把历史存到统一位置:
"local-history.historyPath": "${env:HOME}/.vscode-history",然后把这个路径加入你的常规备份清单 - 注意:Local History 不备份未保存的编辑缓冲区,只存 保存过 的版本 —— Ctrl+S 是关键动作
真正容易被忽略的点是:SSH 配置(%USERPROFILE%\.ssh\config)、Python 解释器路径(python.defaultInterpreterPath)、终端环境变量(terminal.integrated.env.*)这些都在 User 目录里,但导入后不会报错,只会静默失效。得人工检查,不能只看插件装没装上。











