Tmux 是一个强大的终端复用器 (Terminal Multiplexer), 可以在一个终端窗口中管理多个会话、窗口和窗格。它广泛用于服务器开发、远程调试和多任务处理场景。
Tmux 概念和使用
为什么要使用 tmux ?
- 多窗口管理: 在一个终端中打开多个窗口, 无需频繁切换标签或新建终端
- 会话持久化: 即使网络连接断开, Tmux 会话仍然保持, 重新连接后可以继续工作
- 分屏操作: 支持在一个窗口中分割多个区域, 每个区域独立运行命令
- 快捷键高效操作: 丰富的快捷键大幅提升工作效率
- 可定制性强: 通过配置文件 (如
~/.tmux.conf
) 调整功能和键位
核心概念
-
会话 (Session)
- 一个 Tmux 会话包含多个窗口
- 会话可以长期存在, 即使与服务器的连接断开, 会话依然会在后台运行
- 可以随时分离会话, 并在以后通过
tmux attach
命令重新连接, 恢复工作区的状态 - 支持同时管理多个会话, 可以轻松切换和重命名会话
-
窗口 (Window)
- 每个会话可以包含多个窗口, 类似于标签页
-
窗格 (Pane)
- 窗口内可以划分为多个窗格, 每个窗格独立运行各种命令
查看 tmux 版本
CentOS 7 中版本是 1.8
$ tmux -V
tmux 1.8
前缀键
Tmux 中有大量的快捷键, 这些快捷键都需要通过前缀键唤起。默认的前缀键是 Ctrl+b
, 即按下 Ctrl+b
后, 接着按下相应的快捷键才能执行操作。
举例来说, 帮助命令的快捷键是 Ctrl+b ?
。它的用法是, 在 Tmux 窗口中, 先按下 Ctrl+b
, 再按下 ?
, 就会显示帮助信息。然后, 按下 ESC
键或 q
键, 就可以退出帮助。
如果你更喜欢使用 Ctrl+a
作为前缀键, 可以通过修改 ~/.tmux.conf
配置文件来实现
# remap prefix to Control + a
set -g prefix C-a
# bind 'C-a C-a' to type 'C-a'
bind C-a send-prefix
unbind C-b
常用快捷键
快捷键 | 功能 |
---|---|
Ctrl+b c |
新建窗口 |
Ctrl+b % |
窗口左右分割 |
Ctrl+b " |
窗口上下分割 |
Ctrl+b d |
分离当前会话 |
Ctrl+b s |
列出所有会话 |
Ctrl+b w |
列出所有窗口 |
Ctrl+b [方向键] |
在窗格间切换 |
Ctrl+b x |
关闭当前窗格 |
Ctrl+b z |
当前窗格全屏/恢复 |
Ctrl+b ? |
查看所有快捷键 |
会话管理
新建会话
在 Tmux 中, 第一个启动的会话编号为 0
, 第二个为 1
, 以此类推。
使用编号区分会话, 不太直观, 为了更方便区分不同的会话, 可以为会话指定名称。
tmux
# 新建一个指定名称的会话
tmux new -s <session-name>
# 启动新会话
Ctrl+b :new<回车>
列出所有会话
快捷键
Ctrl+b s
: 列出所有会话
查看当前所有的 Tmux 会话
tmux ls
# or
tmux list-session
分离会话
快捷键
Ctrl+b d
: 分离当前会话
或者输入 tmux detach
命令, 就会将当前会话与窗口分离。分离后, 当前 Tmux 窗口会退出, 但会话和其中的进程仍然在后台运行。
tmux detach
恢复会话
tmux attach
命令用于重新接入某个已存在的会话。你可以通过会话编号或会话名称来恢复会话。
# 使用会话编号
tmux attach -t 0
# 使用会话名称
tmux attach -t <session-name>
# 简写方式
tmux a -t <session-name>
结束会话
tmux kill-session
命令用于结束某个会话。你可以使用会话编号或会话名称来指定需要结束的会话。
# 使用会话编号
tmux kill-session -t 0
# 使用会话名称
tmux kill-session -t <session-name>
# 关闭所有会话
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill
切换会话
快捷键
Ctrl+b (
: 切换到上一个会话Ctrl+b )
: 切换到下一个会话Ctrl+b L
: 切换到上一次使用过的会话Ctrl+b s
: 从会话列表中选择会话
tmux switch
命令用于切换会话
# 使用会话编号
tmux switch -t 0
# 使用会话名称
tmux switch -t <session-name>
重命名会话
快捷键
Ctrl+b $
: 重命名当前会话
tmux rename-session
命令用于重命名会话。
tmux rename-session -t 0 <new-name>
上面的命令将 0
号会话重命名为 <new-name>
窗口管理
Tmux 允许在每个会话中创建多个窗口 (window)
新建窗口
快捷键
Ctrl+b c
: 创建一个新窗口, 状态栏会显示多个窗口的信息
tmux new-window
命令用来创建新窗口
tmux new-window
# 新建一个指定名称的窗口
tmux new-window -n <window-name>
切换窗口
快捷键
Ctrl+b w
: 从列表中选择窗口Ctrl+b p
: 切换到上一个窗口 (按照状态栏上的顺序)Ctrl+b n
: 切换到下一个窗口Ctrl+b l
: 切换到上一次使用过的窗口Ctrl+b <number>
: 切换到指定编号的窗口 (<number>
是状态栏上的窗口编号)Ctrl+b 0
Ctrl+b 9
tmux select-window
命令用来切换窗口
# 切换到指定编号的窗口
tmux select-window -t <window-number>
# 切换到指定名称的窗口
tmux select-window -t <window-name>
重命名窗口
快捷键
Ctrl+b ,
: 重命名当前窗口
tmux rename-window
命令用于为当前窗口命名或重命名
tmux rename-window <new-name>
窗口快捷键
下面是一些窗口操作的快捷键
Ctrl+b f
: 查找窗口Ctrl+b &
: 关闭当前窗口
调整窗口排序
按下 Tmux 前缀 Ctrl+b
后, 再输入 :
, 可以使用以下命令来调整窗口顺序
swap-window -s 3 -t 1 # 交换 3 号和 1 号窗口
swap-window -t 1 # 交换当前和 1 号窗口
move-window -t 1 # 将当前窗口移动到 1 号位置
窗格操作
Tmux 可以将窗口划分为多个窗格 (pane), 每个窗格可以独立运行不同的命令。以下是一些常见的窗格操作。
划分窗格
快捷键
Ctrl+b %
: 垂直划分窗格, 左右分割Ctrl+b "
: 水平划分窗格, 上下分割
tmux split-window
命令用于划分窗格
# 划分上下两个窗格
tmux split-window
tmux split-window -v
# 划分左右两个窗格
tmux split-window -h
移动光标
快捷键
Ctrl+b ↑
: 将光标切换到上方窗格Ctrl+b ↓
: 将光标切换到下方窗格Ctrl+b ←
: 将光标切换到左边窗格Ctrl+b →
: 将光标切换到右边窗格Ctrl+b ;
: 切换到上一个窗格Ctrl+b o
: 切换到下一个窗格
tmux select-pane
命令用于移动光标位置
# 光标切换到上方窗格
tmux select-pane -U
# 光标切换到下方窗格
tmux select-pane -D
# 光标切换到左边窗格
tmux select-pane -L
# 光标切换到右边窗格
tmux select-pane -R
交换窗格位置
快捷键
Ctrl+b {
: 将当前窗格与上一个窗格交换位置Ctrl+b }
: 将当前窗格与下一个窗格交换位置Ctrl+b Ctrl+o
: 将所有窗格向前移动一个位置, 第一个窗格变成最后一个窗格Ctrl+b Alt+o
: 将所有窗格向后移动一个位置, 最后一个窗格变成第一个窗格
tmux swap-pane
命令用于交换窗格位置
# 当前窗格上移
tmux swap-pane -U
# 当前窗格下移
tmux swap-pane -D
调整窗格尺寸
以下快捷键可用于调整窗格大小
Ctrl+b :resize-pane -U # 当前窗格向上扩大 1 格
Ctrl+b :resize-pane -L # 当前窗格向左扩大 1 格
Ctrl+b :resize-pane -R # 当前窗格向右扩大 1 格
Ctrl+b :resize-pane -D 20 # 当前窗格向下扩大 20 格
Ctrl+b :resize-pane -t 2 -L 20 # 编号为 2 的窗格向左扩大 20 格
Ctrl+b Alt+ ↑ # 向上扩大窗格
Ctrl+b Alt+ ↓ # 向下扩大窗格
Ctrl+b Alt+ ← # 向左扩大窗格
Ctrl+b Alt+ → # 向右扩大窗格
Ctrl+b Alt+ → → → # 连续向右扩大窗格
翻页及内容搜索
快捷键
Ctrl+b [
: 进入滚动模式 (scrollback mode) 模式, 使用↑
和↓
方向键进行单行滚动Ctrl+b PgUp
: 向上翻页Ctrl+b PgDn
: 向下翻页- 在滚动模式中, 按下
q
退出滚动模式
此外, 还可以使用 Ctrl+s
进行内容搜索, 搜索到多个内容时使用 n
或 N
跳转到下一个或上一个匹配项。
在启用 emacs bindings
时, 使用 Ctrl+s
进行搜索
如果启用了 vim bindings
, 则需要进入 copy mode
, 然后使用 /
(slash) 进行搜索
使用预设布局
Tmux 提供了几种常见的布局, 快捷键如下
Ctrl+b M-1 # 切换到水平均分布局 even-horizontal
Ctrl+b M-2 # 切换到垂直均分布局 even-vertical
Ctrl+b M-3 # 切换到主窗口水平布局 main-horizontal
Ctrl+b M-4 # 切换到主窗口垂直布局 main-vertical
Ctrl+b M-5 # 切换到平铺布局
Ctrl+b 空格 # 切换到下一个布局
窗格快捷键
以下是一些常用的窗格操作快捷键
Ctrl+b x
: 关闭当前窗格Ctrl+b !
: 将当前窗格拆分为一个独立窗口Ctrl+b z
: 当前窗格全屏显示, 再次使用会恢复原来大小Ctrl+b t
: 在当前窗格中显示一个数字时钟Ctrl+b q
: 显示窗格编号
其他命令
以下是一些 Tmux 的常用命令
# 列出所有快捷键及其对应的 Tmux 命令
tmux list-keys
# 列出所有 Tmux 命令及其参数
tmux list-commands
# 列出当前所有 Tmux 会话的信息
tmux info
# 重新加载当前的 Tmux 配置
tmux source-file ~/.tmux.conf
列出所有快捷键
[root@centos ~]# tmux -V
tmux 1.8
[root@centos ~]# tmux list-keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key " split-window
bind-key # list-buffers
bind-key $ command-prompt -I #S "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key ' command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I #W "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key ; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-tree
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key z resize-pane -Z
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key ~ show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key M-1 select-layout even-horizontal
bind-key M-2 select-layout even-vertical
bind-key M-3 select-layout main-horizontal
bind-key M-4 select-layout main-vertical
bind-key M-5 select-layout tiled
bind-key M-n next-window -a
bind-key M-o rotate-window -D
bind-key M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R
Tmux 命令中的 M 按键是什么
在 Tmux 命令中, M
按键代表的是 meta
键。例如, M-1
就是 meta-1
, 类似于 C-1
是 control-1
如果你使用的是普通的 PC 键盘, 可能会注意到没有明确标记为 meta
的键。根据你的键盘布局, meta
键通常是 Alt
键或 Windows
键 (徽标键)
一般可以在 SSH 客户端里设置 meta
按键映射
例如, 以下命令中的 M-1
、M-2
等就是通过 meta
键配合数字键执行的操作
bind-key M-1 select-layout even-horizontal
bind-key M-2 select-layout even-vertical
bind-key M-3 select-layout main-horizontal
bind-key M-4 select-layout main-vertical
bind-key M-5 select-layout tiled
bind-key M-n next-window -a
bind-key M-o rotate-window -D
bind-key M-p previous-window -a
原文
tmux cheat sheet
Tmux 快捷键 & 速查表 & 简明教程
Tmux 使用教程
How do I resize tmux pane by holding down prefix and arrow key for a while?
How do I scroll in tmux?
Tmux commands: What is M-whatever
其他
What do the keys on this Symbolics Space Cadet keyboard do?
tmux终端复用/tmate终端共享/screen
GNU Screen splitting
.tmux.conf 配置文件