Skip to content

键位参考 ​

键位以命名动作经 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-Entersteer 注入把非空草稿作为转向指令注入当前 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 为键,每项记录替换默认值的键以及列出时使用的标签:

yaml
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 指向不同控件否则不能重复,且在输入即筛选的列表所在面板上不能是纯字符键。

预览版 · v0.1.4-rc.1