从结构上理解 tmux
最近用 Google NotebookLM 整理了一套讲 tmux 的幻灯片,15 页。大多数教程上来就让你背快捷键,能照抄,但过两周就忘。这套先把 tmux 的结构和设计讲清楚,键位反而变成顺理成章的东西。
三个设计出发点
tmux 到底解决了什么,就三件事:
- 持久化:终端关了,会话还在。SSH 断线不用重来。
- 多路复用:一个终端里开一堆 shell。
- 可移植:
~/.tmux.conf一搬,换个机器手感一样。
四层结构
tmux 的一切都建立在这四层上:Server → Session → Window → Pane。
- Server:本机只跑一个后台进程,所有会话都挂在它下面。
- Session:一次工作区,通常一个 SSH 连接对应一个会话。
- Window:会话里的标签页。
- Pane:窗口里切成的一块块,每块是独立的 shell。
Client 和 Server 分离
这是整套设计的核心。终端窗口只是个 client,真正的状态都在 Server 上,client 断掉、重连,Server 照跑。持久化就是这么来的。
前缀键
tmux 接管了终端之后,得区分”这个按键给 shell 还是给 tmux”,于是有了 Prefix(默认 Ctrl+b):先按前缀打招呼,再说正事。理解了这一点,键位就全不用背了。
操作天然对得上层级:
- Pane:
Prefix + %竖切,"横切,方向键切换,x关掉 - Window:
Prefix + c新建,0-9切换,p/n前后 - Session:
Prefix + d分离,s打开会话树
复制模式
Prefix + [ 进入复制模式,用 Vim 键位上下翻、选、复制。tmux 自己维护屏幕缓冲区,复制也得过它一道。
自己绑键
Ctrl+b 两级有点慢,很多人把常用的直接绑到 Alt 上,Alt+1 切窗口、Alt+方向键 切窗格。这就是 bind -T root 干的事——在不按前缀时直接响应。配合 if-shell 和 Format 还能做条件绑定,比如只有左边还有窗格时才往左移。
状态栏
status-left / status-right 可以放文本、颜色,甚至嵌入 shell 命令的输出(uptime 之类),status-interval 控制刷新频率。状态栏其实是块可编程区域。
进阶玩法
幻灯片最后列了一批:SSH Armor(SSH 断了会话不丢)、Session Resurrect(重启后恢复会话)、Pane 边框高亮、快速调整大小。都是在四层结构上做文章。
对我来说最有价值的其实是那四层结构。之前记不住键位,就是因为不知道它们挂在哪个层级下面;结构清楚了,键位自己就记住了。
附:这套幻灯片 PDF 原件(15MB)可以在这里下载。