什么是 tmux?
tmux(Terminal Multiplexer)是一个终端复用工具,它允许你在一个终端窗口中管理多个会话、窗口和窗格。最强大的功能是:即使你断开 SSH 连接,tmux 会话中的程序仍然在后台运行,下次重新连接时可以恢复工作现场。
核心优势
- 会话持久化:断开连接后程序继续运行
- 分屏功能:一个窗口分成多个窗格
- 多窗口管理:像浏览器标签页一样管理多个终端
- 跨平台同步:多人协作时可以共享同一个终端会话
安装 tmux
1
2
3
4
5
6
7
8
9
10
11
|
# Ubuntu/Debian
sudo apt install tmux
# CentOS/RHEL
sudo yum install tmux
# macOS
brew install tmux
# Arch Linux
sudo pacman -S tmux
|
核心概念
tmux 采用三层结构:
1
2
3
|
Session(会话)
└── Window(窗口)
└── Pane(窗格)
|
- Session(会话):最顶层的容器,可以持久化保存
- Window(窗口):类似浏览器标签页,每个会话可以有多个窗口
- Pane(窗格):一个窗口可以分成多个窗格,实现分屏
常用命令
会话管理(Session)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# 创建新会话
tmux # 创建无名会话
tmux new -s work # 创建名为 work 的会话
# 列出所有会话
tmux ls
tmux list-sessions
# 连接到会话
tmux attach # 连接到最近使用的会话
tmux attach -t work # 连接到指定会话
tmux a -t work # 简写形式
# 分离当前会话(快捷键)
prefix + d # prefix 默认是 Ctrl+b
# 杀死会话
tmux kill-session -t work # 杀死指定会话
tmux kill-server # 杀死所有会话
# 重命名会话
tmux rename-session -t old_name new_name
|
窗口管理(Window)
| 快捷键 |
说明 |
prefix + c |
创建新窗口 |
prefix + n |
切换到下一个窗口 |
prefix + p |
切换到上一个窗口 |
prefix + 数字 |
切换到指定编号的窗口 |
prefix + w |
以列表形式选择窗口 |
prefix + , |
重命名当前窗口 |
prefix + & |
关闭当前窗口 |
prefix + f |
按名称查找窗口 |
窗格管理(Pane)
| 快捷键 |
说明 |
prefix + % |
垂直分割(左右分屏) |
prefix + " |
水平分割(上下分屏) |
prefix + 方向键 |
切换窗格 |
prefix + o |
切换到下一个窗格 |
prefix + x |
关闭当前窗格 |
prefix + z |
最大化/还原当前窗格 |
prefix + q |
显示窗格编号 |
prefix + space |
切换窗格布局 |
prefix + { |
与上一个窗格交换位置 |
prefix + } |
与下一个窗格交换位置 |
窗格大小调整
1
2
3
|
# 按住 prefix 不放,连续按方向键调整大小
prefix + Ctrl+方向键 # 微调
prefix + Alt+方向键 # 大幅调整
|
复制模式
在 tmux 中复制文本需要进入复制模式:
| 快捷键 |
说明 |
prefix + [ |
进入复制模式 |
q |
退出复制模式 |
v |
开始选择(vi 模式) |
y |
复制选中内容 |
prefix + ] |
粘贴内容 |
配置文件
tmux 的配置文件位于 ~/.tmux.conf,以下是推荐的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# ============================================
# 基础设置
# ============================================
# 设置终端颜色支持
set -g default-terminal "screen-256color"
# 启用鼠标支持
set -g mouse on
# 设置历史记录行数
set -g history-limit 50000
# 设置窗口编号从 1 开始(0 在键盘太远)
set -g base-index 1
setw -g pane-base-index 1
# 关闭窗口后自动重新编号
set -g renumber-windows on
# 减少按键延迟
set -s escape-time 0
# 启用 vi 模式
setw -g mode-keys vi
# ============================================
# 快捷键绑定
# ============================================
# 修改前缀键为 Ctrl+a(可选,默认 Ctrl+b)
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix
# 重新映射分屏快捷键(更直观)
bind | split-window -h -c "#{pane_current_path}" # | 垂直分屏
bind - split-window -v -c "#{pane_current_path}" # - 水平分屏
# 使用 vim 风格的方向键切换窗格
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 快速重载配置文件
bind r source-file ~/.tmux.conf \; display "配置已重载!"
# 新窗口保持当前路径
bind c new-window -c "#{pane_current_path}"
# ============================================
# 外观美化
# ============================================
# 状态栏位置(bottom/top)
set -g status-position bottom
# 状态栏背景色
set -g status-style bg=black,fg=white
# 左侧状态栏
set -g status-left " #[fg=green]#S #[fg=yellow]#I:#P"
set -g status-left-length 30
# 右侧状态栏(显示时间)
set -g status-right "#[fg=cyan]%Y-%m-%d #[fg=white]%H:%M "
# 当前窗口状态栏高亮
setw -g window-status-current-style bg=green,fg=black,bold
# 窗格边框样式
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=green
# 窗格编号显示时间(ms)
set -g display-panes-time 2000
# 消息样式
set -g message-style bg=black,fg=yellow
# ============================================
# 插件管理(需要 TPM)
# ============================================
# 插件列表
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect' # 会话保存恢复
set -g @plugin 'tmux-plugins/tmux-continuum' # 自动保存
set -g @plugin 'dracula/tmux' # Dracula 主题
# resurrect 配置
set -g @resurrect-capture-pane-contents 'on'
# continuum 配置(自动保存间隔,分钟)
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'
# 初始化 TPM(放在最后)
run '~/.tmux/plugins/tpm/tpm'
|
插件管理(TPM)
安装 TPM(Tmux Plugin Manager)
1
|
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
|
安装完成后:
- 将配置写入
~/.tmux.conf
- 启动 tmux
- 按
prefix + I(大写)安装插件
推荐插件
| 插件 |
说明 |
tmux-resurrect |
保存和恢复 tmux 会话 |
tmux-continuum |
自动保存会话(配合 resurrect) |
tmux-yank |
增强复制功能 |
tmux-open |
在浏览器中打开选中链接 |
dracula/tmux |
Dracula 主题 |
实用技巧
1. 保持 SSH 会话
1
2
3
4
5
|
# 在服务器上创建会话
tmux new -s remote_work
# 断开后重新连接
tmux attach -t remote_work
|
2. 同时操作多个窗格
1
2
3
4
5
|
# 开启同步输入(所有窗格同时输入相同内容)
prefix + :setw synchronize-panes on
# 关闭同步
prefix + :setw synchronize-panes off
|
3. 快速布局切换
按 prefix + space 可以在预设布局之间切换:
- even-horizontal(水平均分)
- even-vertical(垂直均分)
- main-horizontal(主窗格在上)
- main-vertical(主窗格在左)
- tiled(平铺)
4. 命令行脚本化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash
# 创建开发环境脚本
tmux new-session -d -s dev
# 创建窗口并分割
tmux rename-window -t dev:0 'editor'
tmux send-keys -t dev:0 'vim .' C-m
tmux new-window -t dev -n 'server'
tmux send-keys -t dev:server 'npm run dev' C-m
tmux new-window -t dev -n 'git'
tmux send-keys -t dev:git 'git status' C-m
# 连接到会话
tmux attach -t dev
|
5. 会话共享
1
2
3
4
5
|
# 用户 A 创建共享会话
tmux new -s shared_session
# 用户 B 加入(需要相同用户或权限)
tmux attach -t shared_session
|
常用命令速查表
会话操作
| 命令 |
说明 |
tmux new -s name |
创建命名会话 |
tmux ls |
列出所有会话 |
tmux a -t name |
连接到会话 |
tmux kill-session -t name |
删除会话 |
prefix + d |
分离当前会话 |
prefix + s |
列出会话并切换 |
窗口操作
| 快捷键 |
说明 |
prefix + c |
新建窗口 |
prefix + n/p |
下/上一个窗口 |
prefix + 数字 |
切换到指定窗口 |
prefix + , |
重命名窗口 |
prefix + & |
关闭窗口 |
窗格操作
| 快捷键 |
说明 |
prefix + % |
垂直分屏 |
prefix + " |
水平分屏 |
prefix + 方向键 |
切换窗格 |
prefix + x |
关闭窗格 |
prefix + z |
最大化窗格 |
prefix + q |
显示窗格编号 |
总结
tmux 是终端用户的必备工具,掌握它可以让你的工作效率倍增:
- 会话持久化:远程工作不怕断线
- 分屏功能:一个窗口搞定所有终端操作
- 脚本化:一键恢复开发环境
- 可定制:丰富的配置和插件生态
开始使用 tmux 吧,你会发现再也离不开它!
📌 提示:建议把常用快捷键打印出来贴在显示器旁边,多练习几次就能形成肌肉记忆。