Tmux命令速查表
从 session、window、pane 的基础概念,到 attach、split、copy-mode,再到 session group 的真正用途,这篇可以当成 tmux 的中文查阅手册。
· 4 min read
目录
以
tmux 3.4为准
tmux:保活终端、拆分工作区、多终端协作同一组 shell。
术语:
session— 工作空间window— 标签页pane— 分屏client— 当前连上来的终端
基础概念 #
| 概念 | 类比 | 作用 |
|---|---|---|
server |
后台守护进程 | 保存所有会话、窗口和 pane |
client |
终端窗口 | 把 tmux 内容显示出来 |
session |
工作空间 | 包含多个 window |
window |
标签页 | 每个 window 里可以切 pane |
pane |
分屏终端 | 真正跑 shell/程序的地方 |
session ≠ client:关闭终端,client 没了,session 还活着。重新 attach 回去就能接着用。多个 client 可以同时连同一个 session。
高频速查 #
| 想做什么 | 命令 | 默认快捷键 |
|---|---|---|
| 新建会话 | tmux new -s dev |
无 |
| 查看会话 | tmux ls |
无 |
| 连接会话 | tmux attach -t dev |
无 |
| 分离当前会话 | 无 | Ctrl-b d |
| 新建窗口 | tmux new-window |
Ctrl-b c |
| 切下一个窗口 | tmux next-window |
Ctrl-b n |
| 切上一个窗口 | tmux previous-window |
Ctrl-b p |
| 选择窗口 | tmux select-window -t :2 |
Ctrl-b 0..9 |
| 横向分屏 | tmux split-window -h |
Ctrl-b % |
| 纵向分屏 | tmux split-window -v |
Ctrl-b " |
| 切 pane | tmux select-pane -L/-R/-U/-D |
Ctrl-b 方向键 |
| 放大当前 pane | tmux resize-pane -Z |
Ctrl-b z |
| 关闭 pane | tmux kill-pane |
Ctrl-b x |
| 进入复制模式 | tmux copy-mode |
Ctrl-b [ |
| 列出快捷键 | tmux list-keys |
Ctrl-b ? |
| 命令行执行 tmux 命令 | 无 | Ctrl-b : |
默认前缀键 Ctrl-b:先按 Ctrl-b 松开,再按后面的键。
会话管理 #
新建和进入 #
tmux
tmux new -s dev
tmux new -s logs -d
tmux attach -t dev
tmux new -As dev| 命令 | 含义 |
|---|---|
tmux |
新建一个默认会话 |
tmux new -s dev |
新建名为 dev 的会话并立刻进入 |
tmux new -s logs -d |
后台创建 logs,不进入 |
tmux attach -t dev |
连接到已存在的 dev |
tmux new -As dev |
有 dev 就 attach,没有就创建 |
常见 alias:
alias ta='tmux new -As main'查看、重命名、删除 #
tmux ls
tmux rename-session -t dev backend
tmux kill-session -t backend
tmux kill-server # 清掉整个 tmux,谨慎使用分离和重新连接 #
Ctrl-b d:detach,退出终端显示,任务继续跑tmux attach -t <session>:重新接回去
window 和 pane #
window 命令 #
tmux new-window -n server
tmux rename-window -t :1 editor
tmux select-window -t :2
tmux move-window -s :2 -t :5| 操作 | 快捷键 |
|---|---|
| 新建 window | Ctrl-b c |
| 下一个 window | Ctrl-b n |
| 上一个 window | Ctrl-b p |
| 选择编号窗口 | Ctrl-b 0..9 |
| 重命名 window | Ctrl-b , |
| 列出 window | Ctrl-b w |
pane 命令 #
tmux split-window -h
tmux split-window -v
tmux select-pane -L
tmux select-pane -R
tmux resize-pane -L 10
tmux resize-pane -Z
tmux kill-pane| 操作 | 快捷键 |
|---|---|
| 左右分屏 | Ctrl-b % |
| 上下分屏 | Ctrl-b " |
| 切换 pane | Ctrl-b 方向键 |
| 临时最大化当前 pane | Ctrl-b z |
| 关闭 pane | Ctrl-b x |
| 按编号显示 pane | Ctrl-b q |
| 在 pane 间交换位置 | Ctrl-b { / Ctrl-b } |
复制模式和滚动历史 #
tmux 自己维护了一份滚动历史,需要进入复制模式才能操作。
| 操作 | 快捷键 |
|---|---|
| 进入复制模式 | Ctrl-b [ |
| 退出复制模式 | q |
| 向上翻页 | PageUp 或移动键 |
| 开始选择 | Space |
| 复制选中内容 | Enter |
| 粘贴 buffer | Ctrl-b ] |
习惯 Vim 风格可以在配置里加:
set -g mode-keys vi
目标语法 #
大部分 tmux 命令都能带 -t 指定目标,格式:
session:window.pane| 目标 | 含义 |
|---|---|
dev |
session dev |
dev:2 |
dev 的第 2 个 window |
dev:2.1 |
dev 第 2 个 window 的第 1 个 pane |
:1 |
当前 session 的第 1 个 window |
.0 |
当前 window 的第 0 个 pane |
tmux send-keys -t dev:2.1 'npm test' Enter
tmux kill-window -t dev:3
tmux select-pane -t :.1进入命令提示符 #
在 tmux 内部按 Ctrl-b : 打开命令提示符,直接输 tmux 命令:
split-window -h
rename-window editor
set -g mouse on效果和在 shell 里执行 tmux split-window -h 相同。
session group #
多个 session 共享同一组 window,但各自保留独立的"当前窗口"和 session 级选项。
和"多终端 attach 同一 session"的区别:
- 同一 session:所有 client 当前窗口同步,你切到
logs,对方也跳过来 - 同一 session group:共享窗口集合,但彼此切换互不影响
共享关系 #
| 项目 | 是否共享 |
|---|---|
| window 集合 | 共享 |
| 新建 / 关闭 window 的结果 | 共享 |
| 当前窗口 | 不共享 |
| 上一个窗口 | 不共享 |
| session 级选项 | 不共享 |
| kill 某个 session | 不影响其他 session |
创建方式 #
基于已有 session 创建:
tmux new -s work
tmux new -d -t work -s work-monitor
tmux attach -t work-monitor显式指定 group 名称:
tmux new -d -t team -s alice
tmux new -d -t team -s bob
tmux attach -t aliceteam 是 group 名,alice 和 bob 是两个不同 session,共享同一组 window。
限制 #
用 new-session -t ... 创建 grouped session 时,-n 和初始 shell-command 不能同时使用。
几个实用命令 #
后台批量起服务 #
tmux new -d -s dev
tmux new-window -t dev -n api
tmux send-keys -t dev:api 'pnpm dev' Enter
tmux new-window -t dev -n worker
tmux send-keys -t dev:worker 'pnpm worker' Enter
tmux attach -t dev判断 session 是否存在 #
tmux has-session -t dev存在返回 0,不存在返回非零,常用在脚本里:
tmux has-session -t dev 2>/dev/null || tmux new -d -s dev
tmux attach -t dev查看 grouped session 信息 #
tmux ls -F '#{session_name} group=#{session_group} members=#{session_group_list}'