02用 Profiles 与扩展组织 VS Code

区分用户、Profile 和工作区配置,用少量开发 Profile 管理扩展,并以可迁移格式保存设置。

2026-08-10
VS CodeProfilesExtensionsSettings SyncWorkspace
本章目录 · 7

VS Code Profile 的主要用途,是为不同工作场景启用不同扩展。主题、字体和基础编辑行为通常到处相同,不需要在 R、Python、WSL 和 Docker Profile 中各复制一遍。

配置放在哪一层

范围 适合保存 是否进入项目仓库
User 当前 Profile 的个人设置
Apply to all Profiles 所有 Profile 共用的主题、字体和界面设置
Workspace 项目约定,例如 formatter、测试和文件排除 可以
Language 某种语言的缩进、formatter 等 取决于所在范围

工作区设置位于项目的 .vscode/settings.json。它会覆盖用户设置,因此只应保存项目成员都需要的行为,不要放个人字体、主题、代理或本机路径。VS Code Settings

Profile 不会继承另一个 Profile

新 Profile 可以从现有 Profile 复制,但复制后两者相互独立。以后修改 Default,副本不会自动跟随。

对于真正共用的设置,在 Settings editor 中使用 Apply Setting to all Profiles;共用扩展则在 Extensions view 中使用 Apply Extension to all Profiles。这样不必维护多份相同 JSON。VS Code Profiles

实际可以从 Default 开始,只有扩展集合明显不同时再创建:

Profile 主要用途 特有扩展
Default 普通文本、Git、CSV 主题、图标、少量通用工具
R & Quarto R、R Markdown、Quarto R、Quarto
Python & Jupyter Python、Notebook Python、Pylance、Python Environments、Jupyter
Remote Development SSH、WSL、容器 Remote SSH、WSL、Dev Containers

如果某个 Profile 长期不用,删除它比继续同步一份过期副本更清楚。

扩展只记录 ID

扩展的稳定标识是 publisher.extension。查看当前 Profile 中安装的扩展:

code --list-extensions

需要连版本一起审计时:

code --list-extensions --show-versions

恢复扩展只需要 ID:

code --install-extension antfu.theme-vitesse
code --install-extension mechatroner.rainbow-csv

不应保存 VS Code 内部 extensions.json 中的 UUID、安装时间、扩展目录和整段 metadata。它们是运行状态,不是可维护的清单。

部分扩展会自动安装依赖。例如安装 Jupyter 主扩展后,不必再手工登记每个 renderer、keymap 和 cell tags 子扩展。VS Code Extension Marketplace

个人 Profile 与项目推荐不同

个人 Profile 决定“我在这个环境中使用什么”;项目的 .vscode/extensions.json 只告诉协作者“这个仓库推荐什么”。项目文件采用下面的结构:

{
  "recommendations": [
    "reditorsupport.r",
    "quarto.quarto"
  ]
}

不要把个人主题、AI 工具或与项目无关的扩展全部推荐给协作者。项目推荐应限制在打开、检查、运行该项目真正需要的扩展。

导出、同步和备份

Profiles editor 的 Export Profile 可以把设置、扩展、快捷键和 snippets 导出到本地 .code-profile 文件或 GitHub gist。导入前可以先预览内容;机器专用设置不会包含在导出结果中。VS Code Profiles

Settings Sync 适合同一人的多台电脑。启用时可以选择是否同步 Settings、Keyboard Shortcuts、Extensions、Profiles 和 UI State。远程 SSH、WSL 或容器端安装的扩展不会由本地 Settings Sync 自动同步,需要在相应远程环境中处理。

一套清楚的保存方式是:

vscode/
├── base-settings.jsonc
├── keybindings.jsonc
├── extensions-common.txt
├── extensions-r.txt
├── extensions-python.txt
└── extensions-remote.txt

这里保存的是整理后的参考源,不是把 %APPDATA%/Code/User 整个目录复制进 Git。

快捷键只保存有意修改的部分

运行 Preferences: Open Keyboard Shortcuts (JSON) 后,文件中只需要保留覆盖项:

[
  {
    "key": "ctrl+shift+t",
    "command": "workbench.action.terminal.newWithProfile",
    "args": {
      "profileName": "PowerShell"
    }
  }
]

命令名前加 - 表示移除某个默认绑定:

{
  "key": "ctrl+shift+k",
  "command": "-quarto.preview"
}

when 决定快捷键在哪种上下文生效。修改后应在 Keyboard Shortcuts editor 中按键搜索,确认没有与系统、终端或其他扩展冲突。

不进入共享配置的项目

  • 本机 R、Python、Conda 和 PDF viewer 的绝对路径;
  • HTTP proxy 与内部服务地址;
  • SSH host alias 和用户名;
  • 当前窗口默认打开哪个个人 Profile;
  • 扩展安装时间、UUID、缓存位置;
  • 未评估就关闭删除、同步或更新确认的设置。

这些内容要么由 VS Code 自动维护,要么只应存在于本机设置中。共享配置越接近“意图”,而不是“某一刻的安装快照”,越容易长期复用。