我们直入主题,Tmux是一个什么样的工具?

Tmux(terminal multiplexer 终端复用器)是一个常用的终端工具,帮助我们在一个实际的交互窗口中打开多个终端并帮我们管理好终端内运行的任务

这里对Tmux的使用做一个简单的整理和记录

为什么要用Tmux

在使用SSH连接目标主机运行任务时,我们运行的任务进程是与SSH的终端绑定的。如果要运行一个长时间保持的任务,那么我们就只能一直保持SSH的时刻连接不可以随时关闭或者退出,而且终端输出的内容我们也不可以在其他的终端查看,对于我们进行其他任务就很不方便

Tmux这样的工具就可以帮助解决这些问题,同时它在终端上拓展的其他功能也可以更好地帮我们完成终端下的工作任务

Tmux使用的基本概念

Tmux使用中有三个非常重要的概念:

  1. Session:会话/任务-顶层结构,包含了多个窗口和窗口内窗格的进程服务

  2. Window:窗口-展现给用户的一个整体窗口输出界面,其界面可以再拆分成多个小的子方格窗口(窗格)用于运行不同任务

  3. Pane:面板/窗格-在一个窗口中被划分出来的一个小区域,可以单独运行命令

我们通过创建一个会话来开始管理一个项目终端,在会话中创建多个窗口来完成一个项目下的多个可视输出界面的切换,在一个窗口中切分出多个窗格来便于我们利用界面进行输入并观察输出

Tmux的使用流程

根据我们了解的Tmux设计概念,不难想到Tmux的终端复用是基于会话(Session)来进行的

所以我们需要创建一个会话来开始使用

会话操作

创建会话

一种最简单的使用方法是直接在终端中输入并执行

tmux

执行之后,终端会直接进入Tmux界面,以界面底部出现一个绿色的信息栏为标志

这里我们关注左下角的信息,"[0]"表示当前我们创建并直接进入了一个名为“0”的会话,而右侧的“0:bash*”则表示我们现在处于会话自动创建的第一个窗口(编号为0),当前在执行bash进程

但是通常我们会使用另一种创建会话的方法来指定会话名称再创建

tmux new -s <会话名称>

比如我们使用指令tmux new -s test来创建一个名为“test”的会话

分离会话

创建和进入会话之后,我们的操作就将通过tmux的窗口来完成

而从当前会话分离出来回到默认终端的方法有主要有两种:

一种是直接在tmux创建的终端窗口中输入

tmux detach

另一种则是借助tmux的操作快捷键,使用Ctrl+B 进入tmux管理模式,再按下D键完成快捷分离

分离操作会保留我们创建的会话,只是从会话界面中退出

查看会话

我们可以使用指令来查看现在已经创建的所有会话:

tmux ls
tmux list-session # 不使用缩写

接入会话

从会话中分离之后,我们可以使用指令再从默认终端回到指定的会话中:

tmux attach -t <会话名称>
tmux at -t <会话名称> # 缩写
tmux attach-seesion -t <会话名称> # 另一种格式

记忆时,可以将创建会话时使用的-s理解为session的缩写,而将接入会话的-t理解为target的缩写

删除会话

使用下面的指令可以直接删除指定的会话:

tmux kill-session -t <会话名称>

另一种方法则是进入到指定会话中,使用普通关闭终端的方法(只适用于当前只有一个窗口,本质是关闭一个窗口)来实现:

  • 使用关闭终端快捷键Ctrl+D

  • 使用退出终端指令exit

切换会话

当处于某一个会话时,我们可以使用指令从当前的会话切换到另一个会话中:

tmux swtich -t <会话名称>

重命名会话

我们如果想保留会话内容并更改会话名称,可以使用指令

tmux rename-session -t <原会话名> <新会话名> 

窗口操作

新建窗口

使用指令可以在会话中创建新的窗口:

tmux new-window
tmux new-window -n <窗口名>

切换窗口

使用指令可以在多个窗口中切换:

tmux select-window -t <窗口号>
tmux select-window -t <窗口名>

窗格操作

划分窗格

使用指令可以按照指定方向对当前的窗格进行划分

tmux split-window # 划分上下两个窗格
tmux split-window -h # 划分左右两个窗格

移动光标

使用指令可以将光标选中到不同的窗格中

# 光标切换到上方窗格
tmux select-pane -U

光标切换到下方窗格

tmux select-pane -D

光标切换到左边窗格

tmux select-pane -L

光标切换到右边窗格

tmux select-pane -R

总体而言,Tmux的会话管理已经能够帮助我们解决进程和终端完全绑定带来的不便了,窗口管理和窗格管理则是帮助我们在Tmux终端下的高效工作,这一部分使用指令就显得太过繁琐,所以通常是需要时直接借助快捷键来完成

Tmux的快捷键整理

# 会话管理(需先按 Ctrl+b,再按以下按键)
new # 创建新会话
s # 列出所有会话(可切换)
$ # 重命名当前会话
d # 分离当前会话(回到终端)

窗口管理(需先按 Ctrl+b,再按以下按键)

c # 创建新窗口
w # 列出所有窗口(可切换)
, # 重命名当前窗口
& # 关闭当前窗口(需确认)
n # 切换到下一个窗口
p # 切换到上一个窗口
0-9 # 切换到编号 0-9 的窗口

面板管理(需先按 Ctrl+b,再按以下按键)

% # 垂直分割面板(左右)
" # 水平分割面板(上下)
x # 关闭当前面板(需确认)
o # 在面板间切换(顺时针)
; # 切换到上一个使用的面板
{ # 交换当前面板与上一个面板位置
} # 交换当前面板与下一个面板位置
Ctrl+o # 旋转面板(顺时针)
空格 # 切换面板布局(默认/平铺/垂直/水平等)
q # 显示面板编号(1秒后消失)
z # 最大化当前面板(再次按恢复)

其他常用操作(需先按 Ctrl+b,再按以下按键)

? # 查看所有快捷键帮助
: # 进入命令模式(可输入 tmux 命令,如 :set mouse on 开启鼠标支持)
[ # 进入复制模式(按 q 退出,复制需配合空格和 Enter)
] # 粘贴复制模式中复制的内容
t # 在当前面板显示时间(5秒后消失)

这里对最常用的一些快捷键(都需要先按 Ctrl+b,再按其他按键)做解释:

  • 创建新窗口Ctrl+B+C可以记忆成new

  • 窗口切换Ctrl+B+P/N可以记忆成previous和next

  • 分割窗格的快捷键符号直接记忆比较好

  • 有不清楚的指令可以直接使用Ctrl+B+?来查看

使用补充

Tmux窗口中的终端与常规终端有所不同,最主要体现在鼠标滚动和右键操作

为了让鼠标滚轮在 tmux 中能够正常滚动窗口内容,我们需要启用鼠标支持,可以使用两种方法来完成:

  • 在Tmux中先使用Ctrl+B+:进入到命令模式,直接输入set -g mouse on

  • 直接修改Tmux的配置文件~/.tmux.conf ,添加内容set -g mouse on ,并运行指令tmux source-file ~/.tmux.conf 来更新配置使其生效

参考资料

  1. Tmux 使用教程 - 阮一峰的网络日志

  2. Tmux教程 (一文就够)-CSDN博客

  3. 提升命令行使用体验──tmux 终端复用 - LUG @ USTC

  4. A Quick and Easy Guide to tmux - Ham Vocke

  5. (67 封私信 / 40 条消息) 1分钟掌握tmux使用 - 知乎

  6. Ubuntu Tmux 启用鼠标滚动_tmux 滚轮-CSDN博客

  7. tmux 中鼠标滚动异常:^[[A和^[[B是什么以及如何解决_为什么终端打出来是^[[a^[[a-CSDN博客