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 自动维护,要么只应存在于本机设置中。共享配置越接近“意图”,而不是“某一刻的安装快照”,越容易长期复用。