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
8 第6章 键盘操作
8.1 三种操作模式
Herdr 的键盘系统设计借鉴了 tmux 的 Prefix 机制,同时引入了更现代的导航模式。共有三种操作模式:
| 模式 | 说明 | 何时使用 |
|---|---|---|
| Terminal Mode | 默认模式,所有按键直接传递给终端中的程序 | 日常终端操作、与 Agent 交互 |
| Prefix Mode | 按下 prefix 键后短暂激活,执行一个快捷键后自动返回 Terminal | 分屏、切换 Tab、执行 Herdr 命令 |
| Navigate Mode | 持久导航模式,j/k/h/l 在 Pane 间移动焦点,无需反复按 prefix | 频繁在多个 Pane 间切换查看 |
核心理念: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 快捷键放在一个”命名空间”下,与终端程序完全隔离。
与 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 |
重新加载配置文件 |
快速参考:随时按 prefix + ? 查看完整的快捷键列表。这是学习键盘操作最快的方式。
8.5 索引跳转
8.5.1 Tab 索引跳转
# 跳转到第 N 个标签页
prefix + 1 → 跳转到 Tab 1
prefix + 2 → 跳转到 Tab 2
prefix + 3 → 跳转到 Tab 3
...
prefix + 9 → 跳转到 Tab 98.5.2 Workspace 索引跳转
# 跳转到第 N 个工作区
prefix + Shift+1 → 跳转到 Workspace 1
prefix + Shift+2 → 跳转到 Workspace 2
...
prefix + Shift+9 → 跳转到 Workspace 98.5.3 组合使用示例
你正在 Workspace 1 的 Tab 3 中工作
prefix + Shift+2 → 切换到 Workspace 2
prefix + 1 → 在 Workspace 2 中切换到 Tab 1
快速回到了另一个项目的第一个标签页
数字跳转的效率:当你有多个 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"注意冲突:ctrl+a 在 Vim/Emacs 中是行首/全选。如果你经常在终端中使用这些编辑器,请避免使用 ctrl+a。ctrl+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 模式。在这种模式下,快捷键使用 Alt(Meta)修饰键,无需先按 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
推荐:如果你是 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-right8.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迁移建议:大部分 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.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
效率公式: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 的所有功能。下一章我们将进入实战篇,学习如何将这些概念组合成高效的工作流。