⌨️ Tmux 速查手册

Prefix = Ctrl + s

基于 ~/.tmux.conf 实际配置生成。自定义键位与 tmux 默认有较大差异,以本文档为准。

自定义绑定(.tmux.conf)
tmux 默认(未被覆盖)
📦

Session 管理

M-S
Session自定义 在当前路径新建 session
C-1 ~ C-9
Session自定义 按编号切换 session F1~F5 也可以
prefix C-c
Session自定义 新建 session
prefix .
Session自定义 重命名 session 覆盖了默认的 move-window
prefix l / y
Session自定义 左 / 右移动当前 session 顺序
prefix 1~0
Session自定义 把当前 window 移动到第 N 个 session 覆盖了默认的 select-window
prefix s
Session默认 列出 / 切换 session x 可关闭选中项
prefix d
Session默认 Detach 当前 session(后台继续跑)
prefix $
Session默认 重命名 session 默认绑定仍可用,但习惯上用 prefix . 代替
prefix D
Session默认 选择要断开的会话
🪟

Window 管理

M-o
Window自定义 在当前路径新建 window
M-1 ~ M-9
Window自定义 切换到当前 session 第 N 个 window
M-l / M-y
Window自定义 上一个 / 下一个 window
M-L / M-Y
Window自定义 当前 session 内左右交换 window 顺序
M-! ~ M-(
Window自定义 把当前 pane 合并到 window 1~9 M-! = :1, M-@ = :2, M-# = :3 …
prefix ,
Window自定义 重命名 window
prefix C-p / C-n
Window自定义 上一个 / 下一个 window 默认 p/n 已被重绑
prefix W
Window自定义 打开 choose-tree
prefix c
Window默认 新建 window
prefix &
Window默认 关闭当前 window(需确认)
prefix w
Window默认 Window / Session 列表选择
🔲

Pane 管理

⚠ 分屏键已重绑:默认的 prefix "(上下分屏)和 prefix %(左右分屏)仍可用,但自定义的 prefix u/e/n/i 会继承当前路径,更推荐使用。
prefix u
Pane自定义 上下分屏 — 新 pane 在上方(继承路径)
prefix e
Pane自定义 上下分屏 — 新 pane 在下方(继承路径)
prefix n
Pane自定义 左右分屏 — 新 pane 在左侧(继承路径)
prefix i
Pane自定义 左右分屏 — 新 pane 在右侧(继承路径)
M-n M-e M-u M-i
Pane自定义 按 左/下/上/右 移动焦点
M-a
Pane自定义 跳到最左 pane
M-g
Pane自定义 跳到右上 pane
M-r
Pane自定义 跳到右下 pane
M-N M-E M-U M-I
Pane自定义 按 左/下/上/右 调整大小(步进 3)
M-f
Pane自定义 最大化 / 还原
M-O
Pane自定义 当前 pane 拆成独立 window
M-Q
Pane自定义 关闭当前 pane
prefix > / <
Pane自定义 向后 / 向前交换 pane
prefix |
Pane自定义 Swap pane
prefix S / V
Pane自定义 从 choose-tree 选 pane 垂直/水平移入当前 window
prefix Space
Pane自定义 2-pane 场景切换横向 / 纵向布局
prefix I N U E
Pane自定义 2-pane 基础上向 右/左/上/下 扩展布局
prefix C-g
Pane自定义 Synchronize-panes 开关 开启时 pane border 变红
prefix x
Pane默认 关闭当前 pane(需确认)
prefix z
Pane默认 最大化 / 还原(与 M-f 效果相同)
prefix ;
Pane默认 切换到上一个 pane
prefix o
Pane默认 切换到下一个 pane
prefix q
Pane默认 显示 pane 编号,按数字跳转
prefix !
Pane默认 将当前 pane 移到新 window
prefix { / }
Pane默认 向前 / 向后置换 pane
prefix t
Pane默认 显示时钟
📋

Copy Mode & 剪贴板

vi key table

进入与退出

  • M-v 进入 copy-mode(无需 prefix)
  • qEscape 退出 copy-mode

选择 & 复制

v
Copy 开始选择
C-v
Copy 矩形选择
y
Copy 复制并退出 → tmux buffer + 系统剪贴板
Y
Copy 复制到行尾

光标移动(Colemak 风格)

n i u e
Copy 左 / 右 / 上 / 下 移动光标
N / I
Copy 行首 / 行尾
h
Copy 跳到下一个词尾
U / E
Copy 向上 / 向下移动 5 行
C-u / C-e
Copy 向上 / 向下滚动 5 行
=
Copy 反向搜索

粘贴

C-S-v / M-V
剪贴板自定义 从系统剪贴板粘贴 无需 prefix,任何模式下可用
prefix p
Buffer自定义 粘贴 tmux buffer 小写 p,覆盖了默认 previous-window
prefix b
Buffer自定义 列出所有 buffer
🤖

Agent 工作流

AI 工作台
M-s
Agent 打开 Agent palette(弹窗)
M-w
Agent Watch 当前 pane 命令 再按一次取消 watch
M-b
Agent 切换当前 window 的 unread 标记
M-m
Agent 跳到最新通知来源
M-M
Agent 跳回上一个 origin
prefix O
Agent 重启当前 opencode pane
prefix P
Agent 切换 agent tracker 通知开关
🚫

被覆盖 / 移除的默认键

避免踩坑
这些 tmux 默认键在你的配置中已被重绑或禁用,按下去不会得到预期的默认行为。
prefix n
默认:next-window → 现在是左侧分屏
prefix p
默认:previous-window → 现在是paste-buffer
prefix l
默认:last-window → 现在是session 左移
prefix .
默认:move-window → 现在是重命名 session
prefix 1~0
默认:select-window N → 现在是移 window 到 session N 用 M-1~M-9 替代 select-window
prefix Space
默认:next-layout → 现在是2-pane 横竖切换
M-p / M-P
已被 unbind → 无功能
💻

常用命令

终端直接执行

📦 Session 管理

# 新建名为 demo 的会话
tmux new -s demo

# 进入/附加会话(默认进入第一个)
tmux a

# 附加到指定会话
tmux a -t demo

# 查看所有会话
tmux ls

# 关闭指定会话
tmux kill-session -t demo

# 关闭服务器:所有会话都将关闭
tmux kill-server

🪟 Window / Pane 管理

tmux kill-pane        # 关闭 pane
tmux kill-window      # 关闭 window

ℹ️ 帮助 / 调试

tmux list-keys        # 列出所有快捷键及对应命令
tmux list-commands    # 列出所有 tmux 命令及参数
tmux info              # 输出 session/window/pane 信息
tmux show-hooks -g    # 查看全局 hook 绑定

⚙️ 配置

# 重新加载 tmux 配置
tmux source-file ~/.tmux.conf

# 进入命令行模式(在 tmux 内)
<prefix> :

🔍 排查配置冲突

# 查看某个键实际绑定了什么
tmux list-keys | grep 'prefix.*Space'

# 查看所有自定义脚本绑定
tmux list-keys | grep 'config/tmux'

# 查看 status line 配置
tmux show -g status-left
tmux show -g status-right
🏗️

配置架构

~/.config/tmux/
~/.config/tmux/ ├── fzf_panes.tmux # fzf 管理所有 pane ├── scripts/ # session/window/pane/AI Agent 脚本 └── tmux-status/ # 状态栏左右两侧 + 图标脚本

💡 基础设置一览

  • Prefix:C-s(替换默认 C-b
  • 默认 shell:/bin/zsh
  • Mouse 始终开启(无 toggle 键)
  • Session / window / pane 编号从 1 开始,window 自动重编号
  • history-limit:10000
  • 状态栏每 1s 刷新
  • detach-on-destroy off:关闭最后一个 window 不会退出 tmux
  • TPM 插件:tmux-resurrect(会话恢复)+ tmux-continuum(每 5 分钟自动保存)

🔍 fzf_panes.tmux

  • fzf 列出所有 pane,支持预览
  • 跳转、kill、移动、交换 pane
  • 维护最近使用 pane 列表 @mru_pane_ids

📋 session_manager.py

  • Session 统一命名 数字-label
  • 按编号切换、重命名
  • 左右移动 session 顺序
  • 移动 window 到指定 session

📊 left.sh (Status)

  • 渲染左侧 session 列表
  • 当前 session 高亮
  • 窄屏时只显示编号
  • 显示问题/失败/未读/执行中图标

🤖 right.sh (Status)

  • 调用 agent-tracker 生成右侧状态
  • 显示 AI Agent 运行状态

⭐ pane_starship_title.sh

  • 用 starship 生成 pane title
  • 叠加 opencode 任务状态
  • 问题 pending / watching 等指示

👀 watch_pane.sh

  • 监控当前 pane 中的命令
  • 命令结束后设置 unread/failed 状态
  • 通过 agent-tracker 发送通知
🪝

Hook 行为

自动触发
client-attached
Ack agent-tracker 通知,刷新状态栏
pane-focus-in
更新 fzf pane MRU → 通知 agent focus → ack 通知 → 清除 unread/fail → 刷新状态栏
pane-died
删除对应 agent-tracker task
after-select-window
执行 on-tmux-window-activate.sh → ack 通知 → 清除 unread/fail → 刷新状态栏
client-session-changed
切换 session 时通知 agent focus → ack → 清除 unread/fail → 刷新
session-created
调用 session_created.sh,保证 session 编号连续
session-renamed
刷新状态栏
session-closed
刷新状态栏
📦

依赖项

🔧
tmux
必需 · 核心
🐚
bash + python3
必需 · 脚本运行
🔍
fzf
可选 · pane 管理
📝
jq
可选 · JSON 处理
🚀
starship
可选 · pane title
📋
pbcopy / pbpaste
可选 · macOS 剪贴板
🤖
agent-tracker
可选 · AI 工作流
💾
tmux-resurrect
TPM · 会话恢复
♻️
tmux-continuum
TPM · 每 5 分钟自动保存
🎯

设计理念

这不只是一份 tmux 配置 — 它是一个 AI Coding 工作台

  • Session 有稳定编号,便于快速跳转和重排
  • Status line 显示各 session/window 的任务状态
  • Pane title 结合 starship 和 opencode 展示上下文
  • 长命令或 Agent 任务结束后能显示未读、失败、等待确认
  • 通过 tmux-resurrect + continuum 自动保存和恢复 agent 相关 pane
  • Colemak 风格的方向键映射(n/e/u/i = 左/下/上/右)贯穿所有模式

最小接入:只保留 fzf_panes.tmux、剪贴板脚本、session 编号脚本。
完整复刻:还需安装 agent-tracker、opencode、tmux-resurrect、starship。