唯一可靠方式是运行命令“developer: generate default activity bar entries”,它会在输出面板列出当前环境所有有效视图id(如workbench.view.explorer、workbench.view.scm、remoteexplorer),扩展注入的非标id需通过开发者工具console执行vscode.workspace.getconfiguration('workbench').get('view.visibility')查询。

活动栏图标顺序不能靠右键拖拽持久生效,唯一可靠方式是手动配置 workbench.activityBar.visibleEntries 数组——漏写 ID 图标就消失,拼错 ID 就无效,且只在用户级 settings.json 中起作用。
怎么拿到当前环境有效的视图 ID 列表
VSCode 不会自动告诉你哪些 ID 可用,直接抄网上的列表大概率出错,尤其装了 Remote-SSH、GitLens 等扩展后,注册 ID 差异很大。
- 打开命令面板(
Ctrl+Shift+P或Cmd+Shift+P),输入并运行Developer: Generate Default Activity Bar Entries - 它会在输出面板打印当前所有已注册的视图 ID,例如:
workbench.view.explorer、workbench.view.scm、remoteExplorer - 注意:
scm是缩写,真实 ID 是workbench.view.scm;remoteExplorer是 Remote 扩展的 ID,不是workbench.view.remote(后者根本不存在) - 如果某个扩展(如 GitHub Pull Requests)注入了非标准 ID,可在开发者工具(
Developer: Toggle Developer Tools)的 Console 里执行vscode.workspace.getConfiguration('workbench').get('view.visibility')查看真实值
怎么写 workbench.activityBar.visibleEntries 配置
这个数组决定图标“是否出现”和“从上到下的顺序”,每个元素必须是完整、准确的视图 ID 字符串,顺序即显示顺序。
- 配置必须写在**用户级**
settings.json(路径通常是~/.config/Code/User/settings.json或 Windows 的%APPDATA%\Code\User\settings.json),工作区级设置会覆盖它,导致“改了没反应” - 示例配置:
{"workbench.activityBar.visibleEntries": ["workbench.view.explorer", "workbench.view.search", "workbench.view.scm", "remoteExplorer"]} - 没写进数组的 ID(比如漏掉
workbench.view.debug)= 图标彻底不显示,且右键也无法“显示”回来 - 改完保存后,必须执行
Developer: Reload Window才生效,重启 VSCode 也行,但单纯关闭再开项目窗口不够
为什么右键拖拽或 Hide 没用
这不是 bug,是 VSCode 明确设计的行为:右键操作只影响当前窗口会话,不写入任何配置。
- 右键活动栏空白处 → 「自定义活动栏」→ 拖动图标:仅临时改变视觉顺序,关掉窗口就还原
- 右键某个图标 → 「Hide」:只是从当前 UI 移除,重启 VSCode 后全部回归
- 想彻底禁用某个图标,只有两个办法:删掉它对应的 ID(在
visibleEntries中排除),或禁用注入该图标的扩展(如卸载 GitLens 来去掉它的图标) - 某些图标(如 Timeline)没有独立视图 ID,也无法通过该配置隐藏,只能靠禁用 Git 扩展或移除工作区 .git 目录间接抑制
容易被忽略的兼容性与陷阱
看似简单的一行配置,实际受版本、扩展、设置层级多重影响,最容易卡在“明明写了却没效果”。
-
workbench.activityBar.location设成"right"或"bottom"是无效的——这个配置项根本不存在,VSCode 会静默忽略 -
remoteExplorer是 Remote-SSH 和 Remote-Containers 共用的 ID,删掉它,所有远程相关图标(包括 SSH 连接、容器浏览)都会消失 - 图标大小由
workbench.activityBar.iconSize控制,默认 22,设低于 16 可能导致 tooltip 文字截断,不建议调太小 - 活动栏和侧边栏状态解耦:即使你把 debug 图标从活动栏移除了,只要存在
launch.json,调试功能依然可用,只是少了个快捷入口
真正起效的配置永远依赖当前环境的真实 ID 列表,而不是通用模板;reload 窗口这一步也常被跳过,结果误判为配置失败。











