tmux 解决一件事:让你的远程任务和 SSH 连接解绑。SSH 断了 → tmux 里的程序继续跑;重新连上 → 接回去继续看。如果你用 VPS 跑 Claude Code 或在云端做任何长任务,tmux 是标配。
这是 tmuxcheatsheet.com 的中文整理版。
看 tmux 命令前先认 3 个东西
1. Prefix(前缀键)= Ctrl + b
tmux 所有快捷键都是先按 prefix,松开,再按下一个键。例如”创建新 window”:
按住 Ctrl + b → 松开 → 按 c
不是三键同按,也不是长按。本文表格里 Ctrl + b c 都按这个节奏读。
2. Session / Window / Pane 三层结构
像浏览器:
| tmux 概念 | 类比浏览器 | 是什么 |
|---|
| session | 整个浏览器窗口 | 一个独立工作环境,可命名,可后台保持 |
| window | 浏览器标签页 | 一个 session 里的”一屏” |
| pane | 标签页分屏 | 一个 window 里再切出来的小框 |
一台服务器可以有多个 session(给不同项目);一个 session 多个 window(同一项目的不同任务);一个 window 多个 pane(同时跑 dev + log + git)。
3. 命令有 3 种来源
| 出现位置 | 长什么样 | 在哪输 |
|---|
| CLI(shell 里) | $ tmux ... | 还没进 tmux 之前在 shell 里跑 |
| Prefix 快捷键 | Ctrl + b X | 已经在 tmux 里,按 prefix + 键 |
| 命令模式 | : ...(冒号开头) | 在 tmux 里先按 Ctrl + b : 进命令模式,再输入命令 |
⚠️ $ 和 : 是约定符号,不要把它打进去:
$ tmux ls —— 你在 terminal 看到的提示符末尾就是 $(或 root 的 #),教程里写出来是模拟”看到提示符时输入后面的内容”。实际输入的只是 tmux ls。
: list-keys —— 表示先按 Ctrl + b : 进入命令模式(此时屏幕底部出现一个 : 提示符),然后只输入 list-keys。
先看这个 — 4 个翻车点 90% 的新人都卡过
| 现象 | 原因 / 解法 |
|---|
鼠标滚轮 / PgUp 不能翻页 ⭐ | tmux 拦截了滚动。必须先 Ctrl + b [ 进 copy mode 才能翻(用方向键 / PgUp / q 退出)。或者 : set mouse on 开鼠标支持 |
| 关掉终端窗口 = session 死了 | 错。关终端 ≠ kill session。session 一直在后台,tmux a -t name 还能接回 |
改了 ~/.tmux.conf 不生效 | tmux 不监听文件改动。要么 Ctrl + b : 然后输入 source-file ~/.tmux.conf,要么 detach 重 attach |
Ctrl + b 太难按总按错 | 在 ~/.tmux.conf 里改 prefix 到 C-a(更顺手),记得 unbind C-b 否则两个都生效 |
⭐ 如果你只看一行就关掉这个网页,看第一行——这是 tmux 新人第一个、最常见、最让人怀疑人生的卡点:“为什么我滚不上去看刚才的输出?” 答案:tmux 截胡了你的滚动,要看历史必须先进 copy mode(Ctrl + b [,然后方向键 / PgUp,q 退出)。
Session — 工作环境
CLI 命令(在 shell 里跑)
| 命令 | 干什么用 |
|---|
tmux | 新建一个 session(无名字) |
tmux new / tmux new-session | 同上,完整写法 |
tmux new -s mysession | 新建一个叫 mysession 的 session |
tmux new -s mysession -n mywindow | 新建 session 同时给第一个 window 命名 |
tmux new-session -A -s mysession | 有 mysession 就接上,没有就新建(最常用) |
tmux ls / tmux list-sessions | 列出所有 session |
tmux a / tmux at / tmux attach | 接回最后一个 session |
tmux a -t mysession | 接回指定 session |
tmux kill-ses -t mysession | 杀掉指定 session |
tmux kill-session -a | 杀掉所有 session 除了当前 |
tmux kill-session -a -t mysession | 杀掉所有 session 除了 mysession |
tmux 内快捷键
| 快捷键 | 干什么用 |
|---|
Ctrl + b d | detach 当前 session(任务留在后台继续跑) |
Ctrl + b $ | 重命名当前 session |
Ctrl + b s | 列出所有 session(选一个跳过去) |
Ctrl + b w | session + window 预览(树形展开) |
Ctrl + b ( | 跳到上一个 session |
Ctrl + b ) | 跳到下一个 session |
: new | 新建 session |
: new -s mysession | 新建命名 session |
: kill-session | 杀当前 session |
: attach -d | detach 其他人在这个 session 上的连接(独占) |
💡 detach ≠ kill。detach 只是断开连接,程序继续跑。这正是 tmux 的卖点——SSH 断了你 detach 一下,重新连上 attach 回去。
Window — 标签页
| 快捷键 | 干什么用 |
|---|
Ctrl + b c | 新建 window |
Ctrl + b , | 重命名当前 window |
Ctrl + b & | 关闭当前 window(会让你确认) |
Ctrl + b w | 列出所有 window |
Ctrl + b n | 下一个 window |
Ctrl + b p | 上一个 window |
Ctrl + b 0 ~ Ctrl + b 9 | 按编号跳到对应 window |
Ctrl + b l | 在最近两个 window 之间切换(toggle last) |
Ctrl + b < | 打开 window 操作菜单 |
命令模式里的 window 操作
| 命令 | 干什么用 |
|---|
: swap-window -s 2 -t 1 | 交换 window 2 和 window 1 的位置 |
: swap-window -t -1 | 把当前 window 往左移一格 |
: move-window -s src:0 -t dst:9 | 把某 session 的 window 移到另一个 session |
: movew -s 0:9 | 把当前 window 重排到编号 9 |
: move-window -r / : movew -r | 重排 window 编号,消除空缺 |
Pane — 分屏
| 快捷键 | 干什么用 |
|---|
Ctrl + b % | 垂直分屏(左右两个 pane) |
Ctrl + b " | 水平分屏(上下两个 pane) |
Ctrl + b ↑ ↓ ← → | 切换到对应方向的 pane |
Ctrl + b o | 切到下一个 pane |
Ctrl + b ; | 在最近两个 pane 间切换 |
Ctrl + b q | 短暂显示每个 pane 的编号 |
Ctrl + b q 0 ~ Ctrl + b q 9 | 按编号跳到 pane |
Ctrl + b z | zoom 当前 pane(全屏 / 还原) |
Ctrl + b Spacebar | 切换 pane 布局(预设几种) |
Ctrl + b { | 把当前 pane 往左移 |
Ctrl + b } | 把当前 pane 往右移 |
Ctrl + b - | 调当前 pane 高度 |
Ctrl + b + | 调当前 pane 宽度 |
Ctrl + b ! | 把当前 pane 变成一个独立 window |
Ctrl + b x | 关闭当前 pane |
Ctrl + b > | 打开 pane 操作菜单 |
命令模式里的 pane 操作
| 命令 | 干什么用 |
|---|
: split-window -h | 垂直分屏(同 Ctrl + b %) |
: split-window -v | 水平分屏(同 Ctrl + b ") |
: join-pane -s 2 -t 1 | 把 window 2 合并成 window 1 的 pane |
: join-pane -s 2.1 -t 1.0 | 把 window 2 的 pane 1 移到 window 1 的 pane 0 |
: setw synchronize-panes | 切换”同步输入”——一次输入发到所有 pane(批量改服务器配置神器) |
Copy Mode — 翻历史 / 搜内容 / 复制
直接在 tmux 里滚鼠标或按 PgUp 没用。要看历史输出必须先进 copy mode。
进 / 出 copy mode
| 快捷键 | 干什么用 |
|---|
Ctrl + b [ | 进入 copy mode |
Ctrl + b PgUp | 进 copy mode 同时往上翻一页 |
q | 退出 copy mode |
Ctrl + b ] | 粘贴 buffer_0 的内容(到当前 pane) |
在 copy mode 里(默认 emacs-style 键位)
| 按键 | 干什么用 |
|---|
↑ / ↓ | 上下滚一行 |
PgUp / PgDn | 上下翻一页 |
g | 跳到最顶 |
G | 跳到最底 |
h / j / k / l | 光标左 / 下 / 上 / 右(vi 风格,若开了 vi 模式) |
w | 光标向前跳一个词 |
b | 光标向后跳一个词 |
/ | 向下搜关键词 |
? | 向上搜关键词 |
n | 跳到下一个匹配 |
N | 跳到上一个匹配 |
Spacebar | 开始选中 |
Esc | 取消选中 |
Enter | 复制选中内容到 buffer |
Buffer 管理(剪贴板)
| 命令 | 干什么用 |
|---|
: show-buffer | 显示 buffer_0 内容 |
: capture-pane | 把当前 pane 可见内容存到 buffer |
: list-buffers | 列出所有 buffer |
: choose-buffer | 显示 buffer 列表选一个粘贴 |
: save-buffer buf.txt | 把 buffer 存到文件 |
: delete-buffer -b 1 | 删 buffer_1 |
: setw -g mode-keys vi | 把 copy mode 改成 vi 风格键位(永久) |
杂项 + 配置
| 命令 / 快捷键 | 干什么用 |
|---|
Ctrl + b : | 进入命令模式(后面所有 : 开头的命令都从这里输入) |
: set -g OPTION | 设置全局选项(所有 session) |
: setw -g OPTION | 设置全局 window 选项 |
: set mouse on | 开鼠标支持——能用鼠标滚轮翻 / 点 pane 切换 |
: source-file ~/.tmux.conf | 重载配置文件(改完 .tmux.conf 必跑) |
tmux -V | 显示 tmux 版本(在 shell 里) |
查帮助
| 命令 / 快捷键 | 干什么用 |
|---|
Ctrl + b ? | 列出当前所有快捷键(最重要的逃生键) |
tmux list-keys | 在 shell 里列出所有快捷键 |
: list-keys | 在 tmux 里列出所有快捷键 |
tmux info | 显示所有 session / window / pane 的状态 |
最常用的 10 个 — 先记这些
如果你只想先记一打能用,这 10 个够 80% 的日常:
tmux new -s work —— 新建命名 session
tmux a -t work —— 接回
tmux ls —— 看有哪些 session
Ctrl + b d —— detach
Ctrl + b c —— 新建 window
Ctrl + b n / p —— 上 / 下一个 window
Ctrl + b % / " —— 垂直 / 水平分屏
Ctrl + b z —— pane zoom
Ctrl + b [ —— 进 copy mode 翻历史
Ctrl + b ? —— 查所有快捷键
tmux 的本质就一句话:让你的工作环境跟 SSH 连接解耦。
知道这一点,所有快捷键都只是它的语法糖。