Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Flex Conditional ToolbarNew to Visual Studio Code? Get it now.
Flex Conditional Toolbar

Flex Conditional Toolbar

Alaylmex

|
4 installs
| (0) | Free
通过 settings.json 灵活配置右上角按钮,支持 Glob 条件显隐和自定义图标
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Flex Conditional Toolbar

一个灵活的 VSCode 工具栏按钮扩展,允许你通过 settings.json 自定义编辑器右上角的按钮,支持根据工作区文件状态和当前打开文件动态显示/隐藏。

功能特性

  • ✅ 无数量限制 - 理论上可配置任意多个按钮
  • ✅ 灵活标识 - 使用自定义 id 标识按钮,更直观
  • ✅ 自定义排序 - 通过 order 字段控制按钮显示顺序
  • ✅ 双重过滤 - 支持 glob(工作区文件)和 when(当前文件)双重过滤
  • ✅ 自定义图标 - 支持 VSCode 内置图标或自定义 SVG 图标(支持明暗主题)
  • ✅ 自定义悬停文字 - 为每个按钮设置个性化的提示文本
  • ✅ Args 占位符 - 支持 ${find:glob} 自动查找文件路径等动态参数
  • ✅ 即时响应 - 文件新建/删除、切换文件时自动更新按钮状态
  • ✅ 诊断日志 - 内置输出面板日志,方便排查问题

安装

  1. 下载 .vsix 安装包
  2. 打开 VSCode,进入 扩展 面板(Ctrl+Shift+X)
  3. 点击右上角 更多操作 (···) → 从 VSIX 安装
  4. 选择下载的 .vsix 文件

使用方法

基础配置

打开 settings.json(Ctrl+Shift+P → 输入 "Preferences: Open Settings (JSON)"),添加如下配置:

{
  "flexToolbar.buttons": [
    {
      "id": "terminal",
      "command": "workbench.action.terminal.toggleTerminal",
      "icon": "terminal",
      "name": "切换终端",
      "order": 1
    }
  ]
}

配置项说明

字段 类型 必填 说明
id string ✅ 按钮唯一标识(如 terminal、build),不能重复
command string ✅ VSCode 命令 ID(如 workbench.action.terminal.toggleTerminal)
args object ❌ 命令参数(可选),支持占位符自动解析(见下方说明)
glob string ❌ 工作区文件匹配规则,满足才显示(如 **/*.uvprojx)。留空则始终显示
when string ❌ 当前打开文件的文件名匹配规则(正则表达式),如 .*\.c$。留空则不过滤当前文件
icon string/object ❌ 按钮图标(见下方示例)
name string ❌ 悬停提示文字,留空使用 id 作为名称
order number ❌ 排序序号,数字越小越靠前(默认按配置顺序)

双重过滤规则

配置组合 显示条件
两者都不配置 始终显示
仅配置 glob 工作区存在匹配文件时显示
仅配置 when 当前打开文件匹配时显示
两者都配置 工作区存在匹配文件 且 当前打开文件匹配时才显示

常用命令 ID 示例

{
  "flexToolbar.buttons": [
    {
      "id": "terminal",
      "command": "workbench.action.terminal.toggleTerminal",
      "icon": "terminal",
      "name": "终端",
      "order": 1
    },
    {
      "id": "saveAll",
      "command": "workbench.action.files.saveAll",
      "icon": "save-all",
      "name": "保存全部",
      "order": 2
    },
    {
      "id": "reload",
      "command": "workbench.action.reloadWindow",
      "icon": "refresh",
      "name": "重载窗口",
      "order": 3
    },
    {
      "id": "settings",
      "command": "workbench.action.openSettingsJson",
      "icon": "gear",
      "name": "设置",
      "order": 4
    }
  ]
}

Glob 规则示例

{
  "flexToolbar.buttons": [
    {
      "id": "build",
      "command": "your-extension.build",
      "glob": "**/*.uvprojx",
      "icon": "play",
      "name": "编译项目",
      "order": 1
    },
    {
      "id": "debug",
      "command": "your-extension.debug",
      "glob": "**/*.{c,h}",
      "when": ".*\\.(c|h)$",
      "icon": "bug",
      "name": "调试",
      "order": 2
    }
  ]
}

自定义图标

方式 A:使用 VSCode 内置图标

{
  "id": "terminal",
  "command": "workbench.action.terminal.toggleTerminal",
  "icon": "terminal"
}

常见内置图标:play, gear, zap, rocket, terminal, eye, bug, sync, add, file-code, save, refresh, check, close, debug-start, debug-stop

方式 B:使用自定义 SVG 图标(支持明暗主题)

{
  "id": "saveAll",
  "command": "workbench.action.files.saveAll",
  "icon": {
    "light": "C:/Users/YourName/icons/save_light.svg",
    "dark": "C:/Users/YourName/icons/save_dark.svg"
  },
  "name": "保存全部"
}

⚠️ 注意:图标路径必须使用绝对路径,且文件必须存在。

Args 占位符

args 中的字符串值支持以下占位符,在点击按钮时自动解析替换:

占位符 说明 示例结果
${find:glob} 在工作区中查找匹配 glob 的文件,返回第一个文件的绝对路径 C:/Projects/myApp/project.cmw
${workspaceFolder} 当前工作区根目录的绝对路径 C:/Projects/myApp
${file} 当前活动文件的绝对路径 C:/Projects/myApp/src/main.c
${fileBasename} 当前活动文件的文件名 main.c

💡 ${find:glob} 会先使用 VSCode 的 findFiles API 搜索,如果未找到则自动使用文件系统递归搜索作为兜底。

示例:自动查找项目文件并传递路径

{
  "flexToolbar.buttons": [
    {
      "id": "build",
      "command": "cms.project.build",
      "args": {
        "prjID": "${find:**/*.cmw}",
        "label": "MyProject",
        "contextValue": "CmsProject"
      },
      "glob": "**/*.cmw",
      "icon": "play",
      "name": "编译项目"
    }
  ]
}

点击按钮时,${find:**/*.cmw} 会自动替换为工作区中找到的第一个 .cmw 文件的绝对路径,实际执行效果等同于:

code --command "cms.project.build" --args '{"prjID":"C:/path/to/project.cmw","label":"MyProject","contextValue":"CmsProject"}'

示例:组合使用多个占位符

{
  "flexToolbar.buttons": [
    {
      "id": "compile",
      "command": "your-extension.compile",
      "args": {
        "project": "${workspaceFolder}",
        "source": "${file}",
        "sourceName": "${fileBasename}",
        "config": "${find:**/Makefile}"
      },
      "when": ".*\\.c$",
      "icon": "gear",
      "name": "编译当前文件"
    }
  ]
}

修改配置后生效

当你修改了 icon、name、id、order 配置后,插件会提示你重新加载 VSCode 以应用更改。你可以:

  1. 点击提示框的 重新加载 按钮
  2. 或手动执行命令:Developer: Reload Window(命令面板中搜索)

💡 提示:glob、when、command、args 的修改是即时生效的,无需重启。

手动刷新

如果配置与实际显示不一致,可以执行命令:

Flex Toolbar: Refresh

(通过命令面板 Ctrl+Shift+P 搜索)

诊断日志

插件内置了详细的日志输出,方便排查问题。查看方式:

  1. 打开 输出面板(Ctrl+Shift+U)
  2. 在右上角下拉菜单中选择 "Flex Toolbar"
  3. 点击按钮后即可看到完整的配置解析和命令执行日志

日志内容包括:

  • 按钮注册信息
  • 占位符解析过程(原始值 → 解析后值)
  • ${find:glob} 搜索过程和结果
  • 最终传递给命令的 args

常见问题

Q: 如何查找 VSCode 命令 ID?

A: 打开键盘快捷设置(Ctrl+K Ctrl+S),搜索功能名称,右键点击 → 复制命令 ID。

Q: 图标不显示怎么办?

A: 检查以下几点:

  • 图标文件路径是否正确(使用绝对路径)
  • 图标文件是否存在
  • 是否使用了正确的格式(字符串或对象)
  • 修改图标后是否重新加载了 VSCode

Q: 按钮为什么不显示?

A: 检查以下几点:

  • glob 规则是否匹配工作区文件
  • when 规则是否匹配当前打开的文件
  • 是否配置了正确的 id 和 command
  • 可以在命令面板执行 Developer: Show Running Extensions 查看扩展是否正常加载

Q: ${find:glob} 找不到文件怎么办?

A: 查看输出面板中 Flex Toolbar 的日志,确认:

  • 工作区文件夹是否正确识别
  • glob 模式是否正确
  • 如果 findFiles API 未找到,插件会自动使用文件系统递归搜索作为兜底

Q: 点击按钮后命令报错怎么办?

A: 查看输出面板中 Flex Toolbar 的日志,确认解析后的 args 是否正确。常见问题:

  • args 为空:检查 settings.json 中是否正确配置了 args 字段
  • 路径为空:检查 ${find:glob} 是否能找到文件

许可证

MIT License

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft