8  第6章 键盘操作

8.1 三种操作模式

Herdr 的键盘系统设计借鉴了 tmux 的 Prefix 机制,同时引入了更现代的导航模式。共有三种操作模式:

graph LR
    T["🖥️ Terminal Mode<br/>默认模式<br/>所有按键直接发送到终端"]
    P["🎯 Prefix Mode<br/>按 prefix 后激活<br/>执行 Herdr 命令"]
    N["🧭 Navigate Mode<br/>持久导航模式<br/>j/k/h/l 移动焦点"]

    T -->|"按下 prefix<br/>(默认 ctrl+b)"| P
    P -->|"执行命令后<br/>自动返回"| T
    P -->|"按下 prefix+n<br/>进入"| N
    N -->|"按下 Esc/q"| T
    T -.->|"持续导航"| N

    style T fill:#4a9eff,color:#fff
    style P fill:#f59e0b,color:#fff
    style N fill:#10b981,color:#fff

模式 说明 何时使用
Terminal Mode 默认模式,所有按键直接传递给终端中的程序 日常终端操作、与 Agent 交互
Prefix Mode 按下 prefix 键后短暂激活,执行一个快捷键后自动返回 Terminal 分屏、切换 Tab、执行 Herdr 命令
Navigate Mode 持久导航模式,j/k/h/l 在 Pane 间移动焦点,无需反复按 prefix 频繁在多个 Pane 间切换查看
Note

核心理念:Terminal Mode 是”你的输入发给程序”,Prefix Mode 是”你的输入发给 Herdr”。这种分离确保了 Herdr 快捷键永远不会与终端程序的热键冲突。


8.2 Prefix 机制详解

8.2.1 什么是 Prefix

Prefix 是一个修饰键序列:你先按下 Prefix(默认 ctrl+b),松开后再按下一个功能键。这下一个键就是 Herdr 命令。

操作流程:

  1. 按下 ctrl+b(Prefix)     ← 进入 Prefix Mode
  2. 松开
  3. 按下 功能键(如 v)       ← 执行命令(右分屏)
  4. 自动返回 Terminal Mode

时间线:
  ──ctrl+b────v──────────────────
       ↑      ↑
    Prefix   命令执行

8.2.2 为什么需要 Prefix

直接使用单键快捷键(如 ctrl+v)的问题在于:

  • 冲突:终端程序(vim、emacs、htop)已经占用了大量 ctrl+ 组合键
  • 有限ctrl+字母 只有 26 个组合,不够用
  • 误触:容易在不该触发时误按

Prefix 机制将所有 Herdr 快捷键放在一个”命名空间”下,与终端程序完全隔离。

Tip

与 tmux 的关系:Herdr 的 Prefix 机制与 tmux 完全一致。如果你是 tmux 用户,迁移成本几乎为零。


8.3 常用快捷键完整列表

8.3.1 分屏操作

快捷键 功能 说明
prefix + v 向右分割 在当前 Pane 右侧创建新 Pane
prefix + - 向下分割 在当前 Pane 下方创建新 Pane
prefix + z 缩放切换 全屏/恢复当前 Pane
prefix + x 关闭 Pane 关闭当前 Pane(会确认)
prefix + { 与上一个交换 将当前 Pane 与前一个交换位置
prefix + } 与下一个交换 将当前 Pane 与后一个交换位置
prefix + o 轮转焦点 在当前 Tab 的 Pane 间循环聚焦

8.3.2 窗格调整

快捷键 功能
prefix + Ctrl+o 向上调整边界
prefix + Ctrl+l 向下调整边界
prefix + Ctrl+k 向上调整边界(vim 风格)
prefix + Ctrl+j 向下调整边界(vim 风格)
prefix + Space 切换布局(水平 ↔︎ 垂直)

8.3.3 标签页操作

快捷键 功能 说明
prefix + c 新建 Tab 创建并聚焦新标签页
prefix + n 下一个 Tab 切换到右侧标签页
prefix + p 上一个 Tab 切换到左侧标签页
prefix + 1..9 跳转到指定 Tab 数字键直接跳转
prefix + & 关闭 Tab 关闭当前标签页(会确认)
prefix + , 重命名 Tab 编辑当前标签页名称
prefix + Shift+n 新建并命名 Tab 创建标签页时同时命名

8.3.4 工作区操作

快捷键 功能 说明
prefix + w 工作区导航 打开工作区切换面板
prefix + Shift+n 新建工作区 创建新工作区
prefix + Shift+1..9 跳转到指定工作区 数字键直接跳转工作区
prefix + Shift+w 关闭工作区 关闭当前工作区

8.3.5 分离与会话

快捷键 功能 说明
prefix + q 分离(detach) 退出到概览面板,保持会话运行
prefix + d 分离到后台 完全退出 Herdr 前台界面

8.3.6 复制模式

快捷键 功能 说明
prefix + [ 进入复制模式 可使用 hjkl 移动光标选择文本
prefix + ] 粘贴 粘贴复制缓冲区内容

复制模式中:

按键 功能
h / l 左/右移动光标
j / k 下/上移动光标
w / b 向前/向后跳一个词
0 / $ 行首/行尾
Space 开始选择
Enter 复制选择并退出
Esc / q 退出复制模式

8.3.7 帮助

快捷键 功能
prefix + ? 显示所有快捷键列表
prefix + r 重新加载配置文件
Tip

快速参考:随时按 prefix + ? 查看完整的快捷键列表。这是学习键盘操作最快的方式。


8.5 索引跳转

8.5.1 Tab 索引跳转

# 跳转到第 N 个标签页
prefix + 1   → 跳转到 Tab 1
prefix + 2   → 跳转到 Tab 2
prefix + 3   → 跳转到 Tab 3
...
prefix + 9   → 跳转到 Tab 9

8.5.2 Workspace 索引跳转

# 跳转到第 N 个工作区
prefix + Shift+1   → 跳转到 Workspace 1
prefix + Shift+2   → 跳转到 Workspace 2
...
prefix + Shift+9   → 跳转到 Workspace 9

8.5.3 组合使用示例

你正在 Workspace 1 的 Tab 3 中工作

prefix + Shift+2   → 切换到 Workspace 2
prefix + 1         → 在 Workspace 2 中切换到 Tab 1

快速回到了另一个项目的第一个标签页
Tip

数字跳转的效率:当你有多个 Tab 时,使用数字键跳转比 prefix+n 逐个切换快得多。养成记忆 Tab 编号的习惯,可以大幅提升操作速度。


8.6 自定义键绑定

8.6.1 配置文件

键绑定在 config.toml[keys] 部分配置:

# ~/.herdr/config.toml

[keys]
# 修改 Prefix 键
prefix = "ctrl+a"          # 默认 ctrl+b,改为 ctrl+a(screen 风格)

# Navigate 模式进入键
navigate = "prefix+n"      # 默认值

# 分屏
split-right = "prefix+v"
split-down = "prefix+-"
split-horizontal = "prefix+|"    # 添加新绑定
split-vertical = "prefix+_"

# 标签页
new-tab = "prefix+c"
next-tab = "prefix+n"
prev-tab = "prefix+p"
close-tab = "prefix+x"
rename-tab = "prefix+,"

# 工作区
workspace-nav = "prefix+w"
new-workspace = "prefix+Shift+n"

# 分离
detach = "prefix+q"

# 复制模式
copy-mode = "prefix+["
paste = "prefix+]"

# 帮助
help = "prefix+?"

8.6.2 自定义 Prefix 键

最常见的需求是修改 Prefix 键。以下是几种流行的选择:

Prefix 键 风格 适合人群
ctrl+b tmux 默认 tmux 用户
ctrl+a screen 风格 GNU screen 用户
ctrl+space 现代风格 非 Emacs 用户
ctrl+g 低冲突 需要低冲突的场景
# 方案 1:ctrl+a(screen 风格)
[keys]
prefix = "ctrl+a"

# 方案 2:ctrl+space
[keys]
prefix = "ctrl+space"
Warning

注意冲突ctrl+a 在 Vim/Emacs 中是行首/全选。如果你经常在终端中使用这些编辑器,请避免使用 ctrl+actrl+space 是更安全的选择。

8.6.3 自定义命令键绑定

Herdr 允许你为任意命令创建快捷键:

[keys]

# === Popup 命令 ===
# 打开 Agent 状态面板
[keys.popup]
status-panel = "prefix+s"

# === Pane 命令 ===
[keys.pane]
# 快速向右分割并聚焦
split-right-focus = "prefix+Shift+v"

# 关闭所有非活跃 Pane
close-inactive = "prefix+Shift+x"

# === Shell 命令 ===
[keys.shell]
# 快速在当前 Pane 中运行测试
run-tests = "prefix+t"
run-lint = "prefix+Shift+l"

# === Plugin Action ===
[keys.plugin_action]
# 触发自定义插件
git-status = "prefix+g"
file-search = "prefix+f"

8.6.4 键绑定类型

类型 说明 示例
popup 打开弹出面板 状态面板、工作区选择器
pane Pane 操作 分割、关闭、缩放
shell 在当前 Pane 执行 shell 命令 运行测试、git 操作
plugin_action 触发插件功能 自定义工作流

8.6.5 Shell 绑定详解

Shell 绑定是最灵活的自定义方式,允许你将任意 shell 命令绑定到快捷键:

[keys.shell]

# 在当前 Pane 运行测试
run-tests = { key = "prefix+t", command = "npm test" }

# 在新分割 Pane 中运行 lint
run-lint = { 
  key = "prefix+Shift+l", 
  command = "npm run lint",
  split = "right",
  focus = false
}

# 在临时 Pane 中运行 git status(自动关闭)
git-quick-status = {
  key = "prefix+g",
  command = "git status -sb && echo 'Press Enter to close' && read",
  split = "down",
  temporary = true
}

8.7 Prefix-free 配置方案

8.7.1 什么是 Prefix-free

如果你不喜欢 Prefix 机制,Herdr 也支持 Prefix-free 模式。在这种模式下,快捷键使用 AltMeta)修饰键,无需先按 Prefix:

# ~/.herdr/config.toml

[keys]
mode = "prefix-free"

# Prefix-free 模式下的快捷键(全部使用 Alt 修饰键)
[keys.bindings]
split-right = "alt+v"
split-down = "alt+-"
next-tab = "alt+n"
prev-tab = "alt+p"
new-tab = "alt+c"
workspace-nav = "alt+w"

8.7.2 Prefix vs Prefix-free 对比

特性 Prefix 模式 Prefix-free 模式
按键步骤 两步(prefix + key) 一步(alt + key)
冲突风险 极低 中等(可能与终端程序冲突)
适合人群 tmux/screen 用户 嫌 Prefix 麻烦的新用户
可绑定数量 几乎无限 受限于 Alt 组合数
学习成本 需要适应 Prefix 概念 直觉式操作

graph TD
    A["选择键绑定模式"] --> B{需要高频操作?}
    B -- 是 --> C{与终端程序冲突敏感?}
    C -- 是 --> D["Prefix 模式<br/>(ctrl+b 默认)"]
    C -- 否 --> E["Prefix-free 模式<br/>(alt 快捷键)"]
    B -- 否 --> F{从 tmux 迁移?}
    F -- 是 --> D
    F -- 否 --> E
    
    style D fill:#4a9eff,color:#fff
    style E fill:#10b981,color:#fff

Tip

推荐:如果你是 Herdr 新手,先使用默认的 Prefix 模式(ctrl+b)。当你熟练后,如果觉得 Prefix 繁琐,再切换到 Prefix-free 模式。


8.8 键绑定重置

8.8.1 重置为默认

如果你修改了太多键绑定导致混乱,可以一键重置:

# 重置所有键绑定为默认值
herdr config reset-keys

# 输出:
# ✅ All key bindings reset to defaults
#    Backup saved to: ~/.herdr/config-keys-backup-20260801.toml

重置操作会: 1. 备份当前键绑定配置 2. 将 [keys] 部分恢复为出厂默认值 3. 保留其他配置项不变

8.8.2 重置单个绑定

# 重置特定键
herdr config reset-keys --key prefix
herdr config reset-keys --key split-right

8.9 从 tmux 迁移

8.9.1 键绑定对照表

如果你是 tmux 用户,以下对照表帮你快速上手 Herdr:

操作 tmux 快捷键 Herdr 快捷键 差异
Prefix ctrl+b ctrl+b ✅ 相同
水平分割 prefix+% prefix+v ⚠️ 不同
垂直分割 prefix+" prefix+- ⚠️ 不同
下一个 Pane prefix+o prefix+o ✅ 相同
Pane 交换 prefix+{ / prefix+} prefix+{ / prefix+} ✅ 相同
关闭 Pane prefix+x prefix+x ✅ 相同
新标签页 prefix+c prefix+c ✅ 相同
下一个 Tab prefix+n prefix+n ✅ 相同
上一个 Tab prefix+p prefix+p ✅ 相同
跳转 Tab prefix+1..9 prefix+1..9 ✅ 相同
关闭 Tab prefix+& prefix+& ✅ 相同
重命名 Tab prefix+, prefix+, ✅ 相同
分离 prefix+d prefix+q ⚠️ 不同
列表 prefix+s prefix+w ⚠️ 不同
复制模式 prefix+[ prefix+[ ✅ 相同
粘贴 prefix+] prefix+] ✅ 相同
缩放 prefix+z prefix+z ✅ 相同
帮助 prefix+? prefix+? ✅ 相同

8.9.2 让 Herdr 完全兼容 tmux 键绑定

如果你想让 Herdr 的键绑定与 tmux 完全一致:

# ~/.herdr/config.toml

[keys]
prefix = "ctrl+b"

[keys.pane]
# tmux 风格的分割
split-right = "prefix+%"      # tmux: %
split-down = "prefix+\""      # tmux: "

[keys.workspace]
detach = "prefix+d"           # tmux: d
list = "prefix+s"             # tmux: s
Tip

迁移建议:大部分 tmux 键绑定在 Herdr 中已经相同,只有分割和分离有差异。你可以选择(1)适应 Herdr 的默认值,或(2)按上面的配置改为 tmux 风格。推荐方案 1,因为 Herdr 的 v- 更直观。

8.9.3 tmux → Herdr 概念映射

tmux 概念 Herdr 概念 说明
Session Workspace Herdr 的 Workspace 有 Git 感知
Window Tab 基本等价
Pane Pane 完全相同
tmux ls herdr workspace list 列出所有工作区
tmux attach -t herdr workspace focus 连接到指定工作区
tmux kill-session herdr workspace close 关闭工作区
tmux split-window -h herdr pane split -d right 水平分割
tmux split-window -v herdr pane split -d down 垂直分割
tmux new-window herdr tab create 新建标签页
tmux kill-window herdr tab close 关闭标签页

8.10 键盘操作效率技巧

8.10.1 技巧一:组合键链

多个快捷键可以组合使用实现复杂操作:

# 快速创建右侧日志 Pane
prefix+v           → 右分屏
prefix+Shift+l     → 在新 Pane 运行 lint(如果配置了 shell 绑定)

# 快速切换项目并新建 Tab
prefix+Shift+2     → 切换到 Workspace 2
prefix+c           → 新建 Tab
prefix+,           → 命名 Tab

8.10.2 技巧二:Navigate 模式批量查看

# 使用 Navigate 模式快速检查 4 个 Agent
prefix+n           → 进入 Navigate 模式

  j j l l          → 依次查看每个 Pane(4 次按键 vs 8 次 prefix+o)

Esc                → 退出 Navigate 模式

8.10.3 技巧三:数字键直达

# 比逐个切换更高效
prefix+3           → 直接跳到 Tab 3

# 跨工作区
prefix+Shift+1     → 跳到 Workspace 1
prefix+2           → 跳到 Tab 2

8.10.4 技巧四:复制模式提取输出

prefix+[           → 进入复制模式

  # 使用 Vim 风格移动
  G                → 跳到末尾
  k k k            → 上移 3 行
  0                → 行首
  Space            → 开始选择
  $                → 选到行尾
  Enter            → 复制

prefix+]           → 粘贴到另一个 Pane
Important

效率公式Navigate 模式 + 数字跳转 + Shell 绑定 = 最少按键完成最多操作。这是高级用户的标准配置。


8.11 配置文件完整示例

以下是一份完整的键绑定配置示例,适合中度自定义的用户:

# ~/.herdr/config.toml

# === 键绑定 ===
[keys]
# 保持默认 prefix
prefix = "ctrl+b"
mode = "prefix"          # 或 "prefix-free"

# === Pane 操作 ===
[keys.pane]
split-right = "prefix+v"
split-down = "prefix+-"
close = "prefix+x"
zoom = "prefix+z"
next = "prefix+o"

# === Tab 操作 ===
[keys.tab]
new = "prefix+c"
next = "prefix+n"
prev = "prefix+p"
close = "prefix+&"
rename = "prefix+,"

# === Workspace 操作 ===
[keys.workspace]
navigate = "prefix+w"
new = "prefix+Shift+n"
detach = "prefix+q"

# === Popup ===
[keys.popup]
status-panel = "prefix+s"          # Agent 状态面板
workspace-switcher = "prefix+Shift+w"  # 工作区切换器

# === Shell 快捷命令 ===
[keys.shell]
# 快速测试
run-tests = {
  key = "prefix+t",
  command = "npm test -- --watch=false"
}

# Git 操作
git-status = {
  key = "prefix+g",
  command = "git status -sb",
  split = "down",
  temporary = true
}

# 快速 lint
run-lint = {
  key = "prefix+Shift+l",
  command = "npm run lint",
  split = "right",
  focus = false
}

# === Navigate 模式 ===
[keys.navigate]
enter = "prefix+n"
exit = ["Escape", "q"]
up = "k"
down = "j"
left = "h"
right = "l"

8.12 小结

本章涵盖了 Herdr 键盘操作的完整体系:

  • 三种模式:Terminal / Prefix / Navigate,满足不同场景的操作需求
  • Prefix 机制:通过两步按键避免与终端程序冲突,是 Herdr 键盘系统的核心
  • 完整快捷键:分屏、标签、工作区、复制模式等 40+ 个快捷键
  • Navigate 模式:Vim 风格的持久导航,适合多 Pane 频繁切换
  • 自定义绑定:通过 config.toml[keys] 部分完全可控
  • Prefix-free 模式:为不喜欢 Prefix 的用户提供 Alt 快捷键替代方案
  • tmux 迁移:大部分快捷键兼容,少量差异可通过配置消除

掌握了键盘操作,你就可以脱离鼠标,用键盘极速操控 Herdr 的所有功能。下一章我们将进入实战篇,学习如何将这些概念组合成高效的工作流。