参考:opstool.com · tmux 终端复用配置


什么是 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 redsetw -g window-status-current-style 'bg=red,...'
setw -g window-status-current-fg white合并进同一 style 行
setw -g window-status-current-attr brightbold 写在 style 内
set -g status-fg whiteset -g status-style 'fg=white,...'
set -g status-bg blue合并进同一 style 行
bind \ split-window -hbind '\' split-window -h(需加引号)

小结

tmux 的学习曲线不高,但回报极大。熟悉之后,你会发现自己再也离不开它:远程开发、多任务并行、会话持久化,一个工具全搞定。

把上面的配置保存到 ~/.tmux.conf,重新连接后就能体验丝滑的 tmux 工作流。