键位参考
键位以命名动作经 mayflyKeymap 服务注册,同一作用域内冲突的绑定会被拒绝;/help 浮层实时列出当前注册的全部键位,并在其后列出下方的共享面板键位(这就是本页的权威来源——若与本文有出入,以 /help 为准)。
全局动作
除非有 capturing 面板(编辑器槽中的选择器、表单或审批)占用输入,否则生效:
| 键 | 动作 | 说明 |
|---|---|---|
Ctrl-O | 切换工具输出展开 | 在最近 3 个 turn 的工具卡与思考块的一行摘要与完整输出之间切换 |
F6 / Shift+F6 | 切换 surface 焦点 | 在 Editor、状态栏视图与 pane lane 间前进/后退:有可进入的视图时 F6 先进入视图,再按布局顺序进入可交互的 pane;到边界回到 Editor |
F7 | 上一个会话 | 将整套 UI 切回上一个显示的会话(主会话、BTW 或 subagent);没有其他打开的会话时显示提示 |
F8 | 关闭旁支会话 | 关闭当前显示的旁支会话(显示主会话时关闭 F7 对端):detach subagent 或 dispose 临时 BTW Agent |
共享面板键位
所有面板、选择器与表单遵循同一套键位语法。聚焦面板底部的提示行由同一套语法生成,因此只显示当前状态下真正有效的键(80 列以下最多 3 条、80 列起最多 4 条,只要 Esc 有作用就一定显示 Esc):
| 键 | 动作 |
|---|---|
↑/↓ | 在行和字段之间移动;滚动文档 |
←/→ | 切换下拉选项、调整行内设置、展开或折叠树节点,或在标签栏中移动 |
Alt+←/→ 或 F2/F3 | 在面板任意位置切换标签;向导会校验离开的步骤 |
Alt+↑/↓ 或 F4/F5 | 在文本编辑和选择器打开之外的任意位置,在控件之间移动 |
← | 聚焦的控件在 ← 能改变内容时自己使用它;否则焦点移到面板的侧栏,在侧栏上 ← 不起作用 |
侧栏上的 Enter 或 → | 进入侧栏旁的页面;在侧栏上 ↑/↓ 立即切换页面 |
Alt+↓ 或 F5, F6 | 在空提示符处进入状态栏的视图(F6 先进入视图,再进入可交互的面板);←/→ 切换视图,Esc 返回提示符 |
PgUp/PgDn, Home/End | 在列表和文档中翻页或跳转 |
Enter | 选择、执行、打开或应用选择器,或开始编辑字段 |
Space | 切换复选框或多选行、打开多选字段,或折叠树节点 |
Tab/Shift+Tab | 提交文本或选择器,并移动到下一个或上一个控件(仅在编辑字段时) |
Esc | 退出最内层:选择器、编辑、搜索、返回、回到第一个控件,最后关闭 |
Ctrl+C | 关闭面板;有未保存修改时先确认 |
输入或 / | 筛选可筛选的列表;Ctrl+U 清除筛选 |
1-9 | 选择带编号的行 |
Ctrl+E | 将聚焦的可滚动内容展开为全屏 |
Delete | 将已修改的字段恢复为继承值或默认值 |
Alt+Enter 或 Ctrl+J | 在多行字段中插入换行 |
Enter, Ctrl+Enter, Alt+Enter, ↑/↓, Backspace | 在提示符中:发送、作为引导发送、插入换行、在空提示符处翻阅历史,或先选中再删除最后一个标记 |
Ctrl+S, c, x, r, Ctrl+G, Ctrl+F | 在面板提供相应含义时保存、复制、删除、刷新、在 $EDITOR 中打开或搜索 |
由这套语法得出的细节:
- Esc 每按一次只退一层,所有面板一致:先取消打开的选择器,再结束文本编辑(草稿保留),再结束进行中的搜索(筛选保留),有返回目标的页面则返回,再从别处回到面板的第一个控件(提示行写作
Esc 返回),最后才关闭面板。tab 条不再是退出途中的一站。 - 不可用的行和选项不会获得光标,移动时直接跳过。不可用的行或动作会在标签旁说明原因。
- 下拉字段用
←/→切换取值,↑/↓永远移动到相邻字段;可切换时,聚焦的下拉字段把取值显示为‹ 取值 ›。Enter打开选项列表;Tab应用高亮选项并前进。 - 继承的设置在值后标注
(继承)或(显式覆盖)。修改取值即成为显式覆盖;在显式覆盖的字段上按Delete恢复为继承值。不再有单独的覆盖按钮。 - 筛选在输入第一个字符或
/时开始。筛选进行中Alt+Enter、Ctrl+R等组合键仍然有效;多选列表中Space仍是勾选。 - 编号行在列表滚动时编号保持不变。在计划评审等关卡中,数字只移动光标,需按
Enter确认。 - 确认统一为共享的“是/否”决定,默认聚焦“否”;问题下方可附一句后果说明。
编辑器语境
文本编辑键(光标移动、多行、undo、kill-ring)归底层编辑器所有;此外:
| 键 | 动作 | 说明 |
|---|---|---|
Escape | 中断会话流 / 清空草稿 | 会话流进行中(所选 Agent 或 live 后代运行中)中断该流:buffer 为空且刚提交的消息可安全撤回时优先撤回并恢复进编辑器,草稿保留;空闲时清空草稿,草稿保留在历史中、按一次 ↑ 即可取回;补全弹层打开时只关弹层 |
Ctrl-C | 清空草稿 → 中断 → 退出 | 有草稿时只清空草稿(按一次 ↑ 可取回)、流继续;空 buffer 且会话流进行中时中断当前 Agent 与所有 running continuable 后代;整棵树空闲且 buffer 为空时 1 秒内第二次按下退出 Mayfly |
Ctrl-Enter | steer 注入 | 把非空草稿作为转向指令注入当前 turn,并清空 buffer |
Ctrl-V | 粘贴图片 | 剪贴板图片入附件库,光标处插入 [image #N] 标记 |
Ctrl-G | 外部编辑器 | 草稿交给外部编辑器全屏编辑(mayfly.editorCommand 设置 → $VISUAL → $EDITOR;Mayfly 挂起让出终端);以 :cq 退出则草稿原样保留 |
Alt+M | 循环会话模型 | 当前 provider 的模型列表里逐个切换(与 /model 走同一通道,Host 会同步持久化默认;按键被消费,草稿不动) |
Backspace | 退格 / 退模式 | 空的 ! bash 提示符上退格即退回 prompt 模式 |
? | 键位帮助 | 空提示符上打开键位帮助;其他情况下 ? 作为字符输入 |
Alt+↑ | 聚焦会话流 | 在提示符上聚焦会话流的最新一行;排队消息那一行上 e 编辑、s 立即发送、d 取消、u 撤销。提示符中的 ↑/↓ 只翻阅历史 |
Shift+Tab | 切换计划状态 | normal ↔ plan,保留当前权限与 YOLO(见会话模式) |
提示符下方显示通知时,这些键依旧送达编辑器。编辑器扩展只能把动作绑定到组合键(如 Alt+R)上;Esc、Tab、Shift+Tab 以及所有未加修饰键的按键都归编辑器。
面板语境
| 表面 | 键位 |
|---|---|
/help 浮层 | ↑↓ / PageUp / PageDown / Home / End 滚动;Ctrl+E 展开;Tab 到 Close;Escape 关闭 |
/sessions 选择器 | 输入筛选工作区或对话;↑↓ 移动;Enter 打开工作区,再打开会话详情;← / → 折叠会话分支;Esc 先结束编辑/筛选,再返回上一层面板 |
| 审批面板 | 默认聚焦 Reject;用 ← / → 或 Tab 到 Allow once、本会话允许与 Reject with feedback;Enter 执行;Escape 拒绝。在反馈页 Enter 发送、Alt+Enter 换行,Esc 先结束编辑再返回决策页。没有数字快捷键 |
| 问卷面板 | 1–9 或 ↑↓ + Enter 选择并前进;多选用 Space 勾选、Enter 确认;在 Other 中输入即开始作答,Enter 提交、Alt+Enter 换行;问题 tabs 在标签栏上用 ← / →,任意位置用 Alt+← / Alt+→(F2 / F3)切换,向前切换会校验当前问题 |
| 表单面板 | ↑↓ 在字段间移动;直接输入或 Enter 开始编辑文本,Enter 确认并前进,textarea 用 Alt+Enter 换行;下拉字段用 ← / → 切换或 Enter 打开;多选字段用 Enter 或 Space 打开;Delete 把显式覆盖的字段恢复为继承值;number 字段用 ← / → 步进;Tab 采用匹配的补全,否则提交并切到下一组;Ctrl+S 在任一字段上保存表单;Escape 先结束编辑,再关闭(有未保存修改时先确认) |
| 计划评审 | ↑↓ 或 1–3 在决策间移动,Enter 确认聚焦的决策;c 复制计划,o 打开反馈;PageUp / PageDown / Shift+↑↓ 滚动计划 |
/model 面板 | 一个按 provider 分组的列表:输入即筛选,↑↓ 选模型,← / → 调思考等级;Enter 设为默认并切换 |
/effort 面板 | 1–9 或 ↑↓ + Enter 设置默认思考等级 |
/permission 选择器 | 1–9 或 ↑↓ + Enter 切换预设;完全访问会先弹出默认聚焦“否”的确认 |
/agents 浏览器 | 输入即筛选;↑↓ 选择,Space 或 ← / → 展开/折叠,Enter 查看;Tab 到 Stop selected,停止前先确认,对 one-shot、未运行或仍有运行中下级的行会直接说明原因 |
/plugin 市场 | Installed / Not installed 标签(标签栏上 ← / → 或 Alt+← / Alt+→,也可用 F2 / F3);输入即筛选;Tab 到 Details、Install 或 Update/repair 与 Remove,可用性按行判断;Ctrl+R 刷新 |
| 旁支会话 | 使用完整主编辑器与同一套 panel 键位;PageUp / PageDown 滚动其 transcript;可恢复会话中发送会唤醒子 Agent:Enter 把消息排队到它的下一个 turn,Ctrl+Enter 转向它;F7 切回、F8 关闭 |
命名动作与自定义键位
每个键都属于一个命名动作,键只是该动作当前的绑定。上面的面板键位是 ui.* 动作(ui.up、ui.accept、ui.cancel、ui.tab-next、ui.focus-prev 等);通用含义是 ui.save、ui.copy、ui.delete、ui.refresh、ui.external 和 ui.search;Mayfly 自身的键保留 mayfly.* id,插件的行操作键命名为 <owner>.<action>。绑定只在一个作用域内生效:编辑器、面板、对话流,或全局。因此 Ctrl+S 在编辑器中是引导、在面板中是保存,Shift+Tab 在编辑器中切换计划模式、在面板中回到上一组。
覆盖保存在 mayfly 设置命名空间的 keybindings 字段中,以动作 id 为键,每项记录替换默认值的键以及列出时使用的标签:
mayfly:
keybindings:
ui.delete: { keys: [d], label: delete }
acme-providers.test: { keys: [ctrl+t], label: Test connection }
preferPlainKeys: true修改立即生效,所有提示随之更新。动作放弃的键随即失效,不会作为别名保留。与同一作用域内其他动作冲突的绑定会被跳过,并给出指明该动作所有者的警告;Esc 和 Enter 不能解绑,也不能分给其他动作;在编辑器或全局作用域中不能绑定纯字符键,否则会输入文字。用于捕获和恢复键位的面板(/keys)在后续阶段提供。
每个使用 Alt 的默认键都有一个不含 Alt 的备选,因为终端和复用器常会吞掉 Alt:F2/F3 切换标签,Ctrl+J 插入换行。第一次按下 F2-F5 时,Mayfly 会认为 Alt 可能无法送达,此后提示行优先显示不含 Alt 的键;preferPlainKeys: true 则始终如此。Alt 键的各种常见编码都能识别:xterm 的 ESC [ 1 ; 3 A(带或不带 kitty 事件类型)、单独的 ESC 前缀、SS3、kitty 的 CSI u 以及 modifyOtherKeys。
插件声明的面板快捷键必须是合法的 key id,不能占用共享导航键,同一页内除非 scope 指向不同控件否则不能重复,且在输入即筛选的列表所在面板上不能是纯字符键。