什么是 tmux?
tmux 是 Terminal Multiplexer(终端复用器) 的缩写。它允许你在一个终端窗口内同时运行多个会话、窗口和面板,并且在断开 SSH 连接后,后台程序依然持续运行——下次连回来时,一切还在原地等你。
对于长期在服务器上工作的开发者和运维来说,tmux 几乎是必备工具。
核心概念
tmux 有三层结构,从外到内依次是:
Session(会话)
└── Window(窗口)
└── Pane(面板)
- Session:一个独立的工作上下文,可以命名,可以在后台持久运行。断开 SSH 后 Session 不会消失。
- Window:相当于浏览器的标签页,一个 Session 内可以有多个 Window。
- Pane:一个 Window 内可以横向或纵向切分出多个 Pane,每个 Pane 就是一个独立的终端。
常用命令速查
会话管理
tmux # 新建匿名会话
tmux new -s work # 新建名为 work 的会话
tmux ls # 列出所有会话
tmux attach -t work # 重新连接 work 会话
tmux kill-session -t work # 删除 work 会话
在 tmux 内部操作(默认前缀键 Ctrl+b,本文改为 Ctrl+a)
| 操作 | 快捷键 |
|---|---|
| 创建新窗口 | prefix + c |
| 切换到下一个窗口 | prefix + n |
| 选择窗口 | prefix + " |
| 水平切分面板 | prefix + \ |
| 垂直切分面板 | prefix + - |
| 在面板间移动 | prefix + h/j/k/l |
| 调整面板大小 | prefix + < / > / _ / + |
| 关闭当前窗口 | prefix + K |
| 暂时离开(detach) | prefix + d |
为什么要自定义配置?
tmux 默认的前缀键是 Ctrl+b,按起来很别扭;默认没有 vi 模式;面板切分快捷键也不直观。自定义 ~/.tmux.conf 可以让 tmux 用起来顺手得多。
新版配置文件(tmux 2.9+)
注意:tmux 2.9 之后,颜色/样式配置从独立的
-bg/-fg/-attr选项统一合并为-style语法。旧配置在新版本下会报invalid option错误。以下是兼容新版的完整配置。
# ~/.tmux.conf
# 参考:https://www.opstool.com/#blog/article/253
# ── 前缀键 ──────────────────────────────────────────────
unbind C-b
unbind &
unbind %
unbind w
unbind '"'
set -g prefix C-a # 将前缀键改为 Ctrl+a,更顺手
bind a send-prefix # 解决与 bash Ctrl+a(行首跳转)的冲突
# ── 窗口与面板切分 ───────────────────────────────────────
bind '\' split-window -h # 水平切分
bind - split-window -v # 垂直切分
bind K confirm-before -p "kill-window #W? (y/n)" kill-window # 关闭窗口前确认
bind '"' choose-window # 窗口选择列表
# ── 面板导航(vim 风格)──────────────────────────────────
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# ── 面板大小调整 ─────────────────────────────────────────
bind < resize-pane -L 5
bind > resize-pane -R 5
bind _ resize-pane -D 5
bind + resize-pane -U 5
# ── 窗口样式(tmux 2.9+ 新语法)────────────────────────
setw -g window-status-current-style 'bg=red,fg=white,bold'
setw -g window-status-style 'bright'
setw -g window-status-format '#[fg=cyan,dim]#I#[fg=blue] #[default]#W#[fg=grey,dim]'
setw -g window-status-current-format '#[fg=cyan,dim]#I#[fg=blue] #[default]#W#[fg=grey,dim]'
# ── 状态栏(tmux 2.9+ 新语法)──────────────────────────
set -g status-style 'bg=blue,fg=white'
set -g status-left ""
set -g status-left-length 0
set -g status-interval 2
set -g status-right "%Y/%m/%d %H:%M"
set -g default-terminal "screen"
# ── 历史与滚动 ───────────────────────────────────────────
set -g history-limit 10000
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
setw -g mode-keys vi # 复制模式使用 vi 按键
# ── 其他 ─────────────────────────────────────────────────
set -sg escape-time 0 # 消除 Esc 键延迟
配置写好后执行以下命令立即生效:
tmux source ~/.tmux.conf
新旧语法对照
| 旧语法(< 2.9) | 新语法(≥ 2.9) |
|---|---|
setw -g window-status-current-bg red | setw -g window-status-current-style 'bg=red,...' |
setw -g window-status-current-fg white | 合并进同一 style 行 |
setw -g window-status-current-attr bright | 用 bold 写在 style 内 |
set -g status-fg white | set -g status-style 'fg=white,...' |
set -g status-bg blue | 合并进同一 style 行 |
bind \ split-window -h | bind '\' split-window -h(需加引号) |
小结
tmux 的学习曲线不高,但回报极大。熟悉之后,你会发现自己再也离不开它:远程开发、多任务并行、会话持久化,一个工具全搞定。
把上面的配置保存到 ~/.tmux.conf,重新连接后就能体验丝滑的 tmux 工作流。