不行,直接复制extensions文件夹不可靠,因其含平台相关二进制模块,跨设备易被vscode静默删除;应导出带版本号的插件id列表并批量安装,同时备份settings.json、keybindings.json、snippets/及ssh配置等关键文件。

直接复制 extensions 文件夹行不行?
不行,但很多人试过就翻车。VSCode 启动时会对 extensions 目录做校验:如果插件文件夹里有平台相关的二进制(比如 ms-python.python 里的 native module),而目标机器的 Node.js 版本、CPU 架构或 VSCode 版本不匹配,它会静默删掉整个插件目录再重装——你白备份了。
更麻烦的是,某些插件(如 esbenp.prettier-vscode)依赖特定版本的 Prettier CLI,只拷文件夹不带缓存和 node_modules,首次激活直接报错“command not found”。
- Windows 默认路径:
%USERPROFILE%\.vscode\extensions - macOS/Linux 默认路径:
~/.vscode/extensions - 若你用
--user-data-dir自定义过路径,则插件实际在该目录下的extensions子目录里
code --list-extensions 导出的列表怎么用才不丢插件?
导出本身没问题:code --list-extensions > extensions.txt,但恢复时常见三类失效:
- 扩展 ID 已变更:比如旧版
dbaeumer.vscode-eslint现在是eslint.vscode-eslint,列表没更新就装不上 - 企业内网屏蔽 Marketplace:
code --install-extension发起的 HTTPS 请求被拦截,命令返回空或卡住 - 含空格的 publisher 名(如私有插件
my corp.my-extension)被xargs错切分,导致安装失败
安全做法是逐行执行:
while IFS= read -r ext; do code --install-extension "$ext" --force; done <br><code>--force</code> 跳过“已存在”提示,避免流程中断;<code>"$ext"</code> 保留引号防止空格崩坏。 <h3>备份时要不要包含 <code>extensions</code> 文件夹本身?</h3> <p>要,但不是为了直接复制粘贴,而是为两种关键场景兜底:</p>
- 离线环境恢复:提前下载好
.vsix文件,放进extensions目录后用code --install-extension /path/to/xxx.vsix安装 - 含原生模块的插件反复报错:比如
ms-dotnettools.csharp在重装后常卡在“正在激活”,保留原extensions目录 + 清空~/.vscode/extensions再软链接过去,比重装稳定 - 调试插件行为:某些插件(如调试器)会在
extensions子目录里写日志或缓存,丢了就难复现问题
注意:不要把整个 extensions 文件夹塞进 Git 或云同步——体积大、二进制多、跨平台不兼容。只在本地完整备份一次,压缩归档即可。
为什么 settings.json + keybindings.json + snippets/ 必须和插件列表一起备份?
因为它们之间有隐式依赖关系,缺一不可:
-
settings.json里可能写了"prettier.requireConfig": true,但没配.prettierrc文件,插件装了也报错 -
keybindings.json中绑定了editor.action.formatDocument到Ctrl+Shift+I,可如果esbenp.prettier-vscode没装,这个快捷键根本无响应 -
snippets/下的javascript.json可能调用了插件提供的变量(如TM_SELECTED_TEXT),而该变量由bradlc.vscode-tailwindcss注入,插件缺席则片段失效
真正完整的备份,是这四样打包:两个 JSON 文件、一个 snippets 文件夹、一份经人工核对的 extensions.txt —— 少一个,恢复后大概率要花半小时手动排查哪块没生效。











