tmux:让你的终端开挂的神器
某次我在服务器上跑一个耗时很长的训练任务,SSH 连接突然断了。重新连上去一看——进程没了,几个小时白费。
那天晚上我学会了 tmux,从此再也没遇到过这个问题。今天就来聊聊这个改变了我终端使用方式的工具。
tmux 是什么?
tmux(Terminal Multiplexer),终端复用器。简单说,它做三件事:
- 会话保持:SSH 断了?没关系,tmux 里的程序继续跑
- 屏幕分割:一个终端窗口里同时看代码、跑服务、查日志
- 多窗口管理:像浏览器标签页一样在多个终端之间切换
如果你经常用 SSH 连服务器,或者日常开发需要同时开好几个终端,tmux 基本是必装工具。
安装
各平台安装都很简单:
# macOS
brew install tmux
# Ubuntu / Debian
sudo apt install tmux
# CentOS / RHEL
sudo yum install tmux
# Arch Linux
sudo pacman -S tmux
装完敲 tmux,看到底部出现一条绿色状态栏,就说明成功了。
三个核心概念
刚接触 tmux 的时候,我被 Session、Window、Pane 这三个概念搞晕了。后来想通了,其实很好理解:
Session(会话)
└── Window(窗口)
└── Pane(窗格)
用一个比喻:
- Session = 一个项目的工作区(比如"前端开发"、"服务器运维")
- Window = 工作区里的标签页(比如"编辑器"、"终端"、"日志")
- Pane = 一个标签页里分割出来的小格子
我通常为每个项目开一个 Session,里面开几个 Window 分别干不同的事。
前缀键:tmux 的操作入口
tmux 的所有快捷键都需要先按一个前缀键,默认是 Ctrl + b。
操作流程:先按 Ctrl + b,松手,再按功能键。
比如要新建窗口:Ctrl + b,松手,按 c。
下面我用 <prefix> 表示这个前缀键。
会话管理
会话是 tmux 最核心的功能。它让你的工作环境独立于终端连接存在。
基本操作
# 新建会话(自动编号)
tmux
# 新建命名会话(推荐)
tmux new -s my-project
# 查看所有会话
tmux ls
# 连接到已有会话
tmux attach -t my-project
# 简写
tmux a -t my-project
# 销毁会话
tmux kill-session -t my-project
会话内快捷键
| 快捷键 | 功能 |
|---|---|
<prefix> d |
断开当前会话(detach),会话后台继续运行 |
<prefix> s |
列出所有会话,可以切换 |
<prefix> $ |
重命名当前会话 |
我最常用的工作流:SSH 到服务器 → tmux a -t work 恢复上次的工作环境 → 干完活 <prefix> d 断开 → 关掉 SSH。下次连上来,一切还在。
窗口管理
窗口就像终端里的标签页,底部状态栏会显示所有窗口的编号和名称。
| 快捷键 | 功能 |
|---|---|
<prefix> c |
新建窗口 |
<prefix> , |
重命名当前窗口 |
<prefix> w |
列出所有窗口(可预览和切换) |
<prefix> n |
切换到下一个窗口 |
<prefix> p |
切换到上一个窗口 |
<prefix> 0-9 |
切换到指定编号的窗口 |
<prefix> & |
关闭当前窗口(会确认) |
<prefix> w 是我用得最多的,它会弹出一个可视化列表,能看到每个窗口里在跑什么,用方向键选择后回车切换。
窗格管理
窗格是 tmux 最酷的功能——把一个窗口分成多个区域,同时显示不同内容。
分割窗口
<prefix> % # 左右分割(垂直线)
<prefix> " # 上下分割(水平线)
我一开始老记混这两个键。后来想了个办法:% 像一条竖线把东西分成左右," 像两个点上下排列。
窗格操作
| 快捷键 | 功能 |
|---|---|
<prefix> 方向键 |
在窗格之间移动光标 |
<prefix> x |
关闭当前窗格(会确认) |
<prefix> z |
当前窗格全屏/恢复(zoom) |
<prefix> Space |
切换窗格布局 |
<prefix> { |
当前窗格向前移动 |
<prefix> } |
当前窗格向后移动 |
<prefix> q |
显示窗格编号,按编号可快速跳转 |
<prefix> z 是我的最爱。写代码的时候,日志窗格太小看不清?按一下 z 全屏查看,再按一下回到分屏。
调整窗格大小
按住 <prefix> 不放,然后按方向键可以调整窗格边界。或者用更精确的方式:
# 在 tmux 命令模式下(<prefix> : 进入)
resize-pane -D 5 # 向下扩展 5 行
resize-pane -U 5 # 向上扩展 5 行
resize-pane -L 10 # 向左扩展 10 列
resize-pane -R 10 # 向右扩展 10 列
复制模式
tmux 有自己的复制粘贴机制,刚开始我觉得很别扭,习惯之后发现比鼠标选中方便多了。
<prefix> [ # 进入复制模式
# 用方向键/Page Up/Page Down 浏览
Space # 开始选择
Enter # 复制选中内容
<prefix> ] # 粘贴
在复制模式下可以用 vi 风格的快捷键(hjkl 移动、/ 搜索等),前提是在配置里设置了 set -g mode-keys vi。
实用场景:服务器上的日志输出太快,来不及看?进入复制模式就能"暂停画面",慢慢往上翻。
我的配置推荐
tmux 的默认配置有些反人类,下面是我踩坑后总结的配置,写在 ~/.tmux.conf 里:
# 将前缀键改为 Ctrl + a(比 Ctrl + b 更顺手)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 用 | 和 - 分割窗口(比 % 和 " 直观)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 新窗口/窗格继承当前路径
bind c new-window -c "#{pane_current_path}"
# 用 hjkl 切换窗格(vim 风格)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 开启鼠标支持(可以用鼠标点击切换窗格、拖拽调整大小)
set -g mouse on
# 复制模式使用 vi 键位
setw -g mode-keys vi
# 状态栏美化
set -g status-style 'bg=#333333 fg=#ffffff'
set -g status-left '#[fg=#ffffff,bold] #S '
set -g status-right '%Y-%m-%d %H:%M '
# 窗口编号从 1 开始(0 离得太远了)
set -g base-index 1
setw -g pane-base-index 1
# 减少 ESC 延迟(对 vim 用户很重要)
set -sg escape-time 10
# 加大滚动缓冲区
set -g history-limit 50000
# 自动重新编号窗口
set -g renumber-windows on
修改后执行 tmux source-file ~/.tmux.conf 生效,或者在 tmux 内按 <prefix> : 输入 source-file ~/.tmux.conf。
实战场景
场景一:远程服务器长时间任务
# SSH 到服务器
ssh user@server
# 创建会话
tmux new -s training
# 启动训练任务
python train.py --epochs 100
# 按 <prefix> d 断开,安心关掉笔记本
# 第二天回来
tmux a -t training
# 任务还在跑,输出都在
场景二:日常开发多窗格布局
tmux new -s dev
# 窗格 1:代码编辑器
vim src/app.py
# <prefix> " 上下分割
# 窗格 2:运行开发服务器
npm run dev
# <prefix> % 左右分割
# 窗格 3:Git 操作和测试
git status
最终效果:上半屏是代码编辑器,左下是开发服务器输出,右下用来跑 Git 和测试。一个终端搞定一切。
场景三:结对调试
tmux 支持多人连接同一个会话。你和同事可以同时看到、操作同一个终端:
# 你创建会话
tmux new -s debug
# 同事连接同一个会话
tmux a -t debug
# 两个人看到的是同一个画面,可以实时协作
远程结对编程的利器。
常用命令速查
# 会话
tmux new -s name # 新建命名会话
tmux ls # 列出会话
tmux a -t name # 连接会话
tmux kill-session -t name # 销毁会话
# 在 tmux 内(都需要先按前缀键)
d # 断开会话
c # 新建窗口
, # 重命名窗口
n / p # 下/上一个窗口
% # 左右分割
" # 上下分割
方向键 # 切换窗格
z # 窗格全屏/恢复
x # 关闭窗格
[ # 进入复制模式
进阶:插件管理
如果你想要更丰富的功能,可以试试 TPM(Tmux Plugin Manager):
# 安装 TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
在 ~/.tmux.conf 底部添加:
# 插件列表
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect' # 会话持久化,重启后恢复
set -g @plugin 'tmux-plugins/tmux-continuum' # 自动保存/恢复会话
set -g @plugin 'tmux-plugins/tmux-yank' # 系统剪贴板集成
# 初始化 TPM(放在配置文件最后)
run '~/.tmux/plugins/tpm/tpm'
tmux-resurrect 是我最推荐的插件。tmux 本身在服务器重启后会话会丢失,这个插件可以保存和恢复整个工作环境,包括窗口布局和运行的程序。
总结
tmux 的学习曲线大概长这样:
- 第一天:觉得快捷键好多好复杂
- 第一周:记住了 5-6 个常用操作,开始觉得方便
- 一个月后:离不开它了
我的建议是不要试图一次学完所有快捷键。先掌握这几个就够用了:
tmux new -s name/tmux a -t name— 创建和恢复会话<prefix> d— 断开会话<prefix> c/<prefix> n/<prefix> p— 窗口操作<prefix> %/<prefix> "— 分割窗格<prefix> z— 窗格全屏
用熟了这些,其他的自然会慢慢学会。
你在用 tmux 吗?有什么私藏的配置或技巧?欢迎在评论区分享。

Comments NOTHING