跳转到内容

tmux

tmux 是一个终端多路复用器(terminal multiplexer),它允许用户在一个终端窗口中运行多个终端会话,并通过分割窗口、创建标签页等方式高效管理这些会话。

Terminal window
tmux [命令] [选项]

tmux 提供三个核心概念:

  • 会话(Session):一个独立的工作环境,可以包含多个窗口,每个会话有唯一的名称或编号
  • 窗口(Window):类似于浏览器中的标签页,一个会话可以包含多个窗口,每个窗口占据整个终端区域
  • 面板(Pane):一个窗口可以分割为多个面板,每个面板运行一个独立的终端实例

server-session-window-panel.png

前缀键是 tmux 的特殊快捷键,必须在执行大多数 tmux 快捷键之前按下,用于区分普通终端输入和 tmux 的控制命令。

默认前缀键是 Ctrl+b,即先按下 Ctrl+b,再按对应的快捷键。 例如帮助命令的快捷键是 Ctrl+b ?:先按 Ctrl+b,再按 ?,即可显示帮助信息。

新建会话

Terminal window
$ tmux [new-session] # 创建会话,默认编号 0、1、2...
$ tmux new -s <session-name> # 创建指定名称的会话

一个 tmux 会话底部有一个绿色的状态栏,左侧是会话信息,右侧是系统信息。

session.png

左侧信息:[0] 表示 0 号会话,0 表示 0 号窗口,zsh 表示使用的 shell,* 表示该窗口已激活。

重命名会话

Terminal window
$ tmux rename-session [-t target-session] new-name

查看会话

Terminal window
$ tmux ls # 查看所有会话信息
$ tmux list-session # 等价命令

分离会话

Terminal window
$ tmux detach # 退出当前会话,会话在后台继续运行

接入会话

Terminal window
$ tmux attach -t <session-name> # 重新接入已存在的会话

切换会话

Terminal window
$ tmux switch -t <session-name> # 切换到指定会话

杀死会话

Terminal window
$ tmux kill-session -t <session-name> # 彻底删除指定会话

新建窗口

Terminal window
$ tmux new-window # 创建新窗口,默认编号递增
$ tmux new-window -n <window-name> # 创建指定名称的窗口

window.png

从状态栏左侧可以看到当前会话中的窗口列表。

重命名窗口

Terminal window
$ tmux rename-window [-t target-window] new-name

查看窗口

Terminal window
$ tmux list-windows # 查看当前会话中所有窗口
$ tmux lsw # 简写
$ tmux lsw -a # 列出所有会话中的所有窗口

* 表示正在使用的窗口,- 表示最近使用的窗口。

切换窗口

Terminal window
$ tmux select-window -t <window-name> # 切换到指定窗口
$ tmux next-window # 切换到下一个窗口
$ tmux previous-window # 切换到上一个窗口

移动窗口

Terminal window
$ tmux move-window -t target_index # 移动窗口到指定编号
$ tmux swap-window -t +1 # 与下一个窗口交换位置
$ tmux swap-window -t -1 # 与上一个窗口交换位置

退出窗口

Terminal window
$ tmux kill-window # 关闭当前窗口
$ exit # 等价操作

划分面板

Terminal window
$ tmux split-window -h # 水平分割(左右排列)
$ tmux split-window -v # 垂直分割(上下排列)
$ tmux split-window -h -p 30 # 水平分割,右侧面板占 30%

查看面板

Terminal window
$ tmux list-panes # 列出当前窗口中的所有面板
$ tmux lsp # 简写
$ tmux lsp -a # 列出所有会话中的所有面板

切换面板

Terminal window
$ tmux select-pane -U # 切换到上方面板
$ tmux select-pane -D # 切换到下方面板
$ tmux select-pane -L # 切换到左边面板
$ tmux select-pane -R # 切换到右边面板

调整面板大小

Terminal window
$ tmux resize-pane -L/-R/-U/-D amount # 向指定方向扩展 amount 个字符
$ tmux resize-pane -Z # 最大化/还原面板

杀死面板

Terminal window
$ tmux kill-pane # 关闭当前面板
$ tmux kill-pane -t pane_index # 关闭指定编号的面板
$ tmux kill-pane -a # 关闭除活动面板外的所有面板
Terminal window
$ tmux list-keys # 列出所有快捷键及其对应的命令
$ tmux list-commands # 列出所有 tmux 命令及其参数
$ tmux info # 列出当前所有 tmux 会话的信息
$ tmux source-file ~/.tmux.conf # 重新加载 tmux 配置

以下快捷键均需先按前缀键(默认 Ctrl+b)。

会话管理

功能 对应命令行 快捷键
新建会话 tmux new -s <session-name> 无
分离当前会话 tmux detach d / D
显示会话列表并切换 tmux list-sessions / tmux attach -t session_name s
重命名当前会话 tmux rename-session new_name $
切换到上一个会话 tmux previous-session (
切换到下一个会话 tmux next-session )
杀死指定会话 tmux kill-session -t session_name 无

窗口管理

功能 对应命令行 快捷键
创建新窗口 tmux new-window c
切换到下一个窗口 tmux next-window n
切换到上一个窗口 tmux previous-window p
切换到指定编号窗口 tmux select-window -t window_index 0-9
显示窗口列表并切换 tmux list-windows w
重命名当前窗口 tmux rename-window new_name ,
关闭当前窗口 tmux kill-window &
与上一个窗口交换位置 tmux swap-window -t -1 {
与下一个窗口交换位置 tmux swap-window -t +1 }
查找窗口 tmux find-window pattern f
移动窗口到指定编号 tmux move-window -t target_index 无

面板管理

功能 对应命令行 快捷键
水平分割面板 tmux split-window -h %
垂直分割面板 tmux split-window -v "
切换到指定方向面板 tmux select-pane -L/-R/-U/-D 方向键
显示面板编号并切换 tmux display-panes q
关闭当前面板 tmux kill-pane x
最大化/恢复当前面板 tmux resize-pane -Z z
调整面板大小 tmux resize-pane -L/-R/-U/-D amount Ctrl+方向键
垂直均分布局 tmux select-layout even-horizontal Alt+1
水平均分布局 tmux select-layout even-vertical Alt+2
主面板水平布局 tmux select-layout main-horizontal Alt+3
主面板垂直布局 tmux select-layout main-vertical Alt+4
平铺布局 tmux select-layout tiled Alt+5
将面板转换为窗口 tmux break-pane Ctrl-b !

辅助快捷键

快捷键 功能 说明
Ctrl-b : 进入命令模式 打开命令提示符,输入 tmux 命令(如 split-window、set-option)
Ctrl-b ? 显示帮助(快捷键列表) 查看所有可用快捷键,进入复制模式浏览

tmux 的配置通过 ~/.tmux.conf 文件管理,配置文件会在 tmux 启动时加载。文件内容就是 tmux 命令。若想在已开启的会话中重新加载配置,可用 tmux source-file ~/.tmux.conf。

自定义配置快捷键的例子:

Terminal window
# 更改前缀键为 Ctrl-a
set -g prefix C-a # 设置前缀为 C-a,全局有效 -g
unbind C-b # 取消原来的前缀 C-b
bind C-a send-prefix # 设置 C-a 为发送前缀
# 自定义面板切换为 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 "Reloaded!"