Tmux 学习笔记

这段时间整理笔记, 发现一篇宝藏文章: Tmux使用手册 | louis blog, 自己并没有好好通读, 这篇文章详细介绍了如何使用tmux并解释了为什么使用tmux而不是screen, 因为具有以下优点:

  • 丝滑分屏(split),虽然iTem2也提供了横向和竖向分屏功能,但这种分屏功能非常拙劣,完全等同于屏幕新开一个窗口,新开的pane不会自动进入到当前目录,也没有记住当前登录状态。这意味着如果我ssh进入到远程服务器时,iTem2新开的pane中,我依然要重新走一遍ssh登录的老路(omg)。tmux就不会这样,tmux窗口中,新开的pane,默认进入到之前的路径,如果是ssh连接,登录状态也依旧保持着,如此一来,我就可以随意的增删pane,这种灵活性,好处不言而喻。
  • 保护现场(attach),即使命令行的工作只进行到一半,关闭终端后还可以重新进入到操作现场,继续工作。对于ssh远程连接而言,即使网络不稳定也没有关系,掉线后重新连接,可以直奔现场,之前运行中的任务,依旧在跑,就好像从来没有离开过一样;特别是在远程服务器上运行耗时的任务,tmux可以帮你一直保持住会话。如此一来,你就可以随时随地放心地进行移动办公,只要你附近的计算机装有tmux(没有你也可以花几分钟装一个),你就能继续刚才的工作。
  • 会话共享(适用于结对编程或远程教学),将 tmux 会话的地址分享给他人,这样他们就可以通过 SSH 接入该会话。如果你要给同事演示远程服务器的操作,他不必直勾勾地盯着你的屏幕,借助tmux,他完全可以进入到你的会话,然后静静地看着他桌面上你风骚的键盘走位,只要他愿意,甚至还可以录个屏。

特别记录一下学习过程

安装

Mac

1
brew install tmux

CentOS/Amazon Linux/RHEL

1
yum install -y tmux

Ubuntu

1
apt-get install -y tmux

基础使用

新建会话

1
2
3
4
5
# 命令
tmux new -s <NAME>

# 样例
tmux new -s test

断开会话

1
2
3
4
5
# 命令
tmux detach

# 简写
tmux det

或者键盘执行组合键Ctrl+B->D, 即先按下Ctrl+B组合键, 松开, 然后按下D即可 原博文此处表述不够明确, 查询过tmux的manual后才理解

1
man tmux
tmux manual说明

重连会话

1
2
3
4
5
6
7
8
9
10
11
# 命令
tmux attach -t <NAME>

# 不指定Session的Name会自动进入第一个会话
tmux attach

# 简写
tmux a -t <NAME>

# 样例
tmux a -t test

关闭会话

1
2
3
4
5
# 命令
tmux kill-session -t test

# 简写
tmux kill-ses -t test

其他相关命令

kill-pane

简写为kill-p 关闭面板, 如果一个session只有一个面板, 执行这个命令等同于kill-session

kill-server

简写为kill-ser 关闭服务端, 所有会话都会被关闭

全部会话都会被关闭

kill-window

简写为kill-w 关闭窗口, 如果一个session只有一个窗口, 执行这个命令等同于kill-session

查看会话

1
2
3
4
5
# 命令
tmux list-session

# 简写
tmux ls

如果在会话中Ctrl+B->S, 然后就可以通过///来控制切换/展开等功能, 回车键进入

在会话中也可以切换

快捷指令

Tmux使用手册 | louis blog

系统

前缀 指令 描述
Ctrl+b ? 显示快捷键帮助文档
Ctrl+b d 断开当前会话
Ctrl+b D 选择要断开的会话
Ctrl+b Ctrl+z 挂起当前会话
Ctrl+b r 强制重载当前会话
Ctrl+b s 显示会话列表用于选择并切换
Ctrl+b : 进入命令行模式,此时可直接输入ls等命令
Ctrl+b [ 进入复制模式,按q退出
Ctrl+b ] 粘贴复制模式中复制的文本
Ctrl+b ~ 列出提示信息缓存

窗口(window)

前缀 指令 描述
Ctrl+b c 新建窗口
Ctrl+b & 关闭当前窗口(关闭前需输入y or n确认)
Ctrl+b 0~9 切换到指定窗口
Ctrl+b p 切换到上一窗口
Ctrl+b n 切换到下一窗口
Ctrl+b w 打开窗口列表,用于且切换窗口
Ctrl+b , 重命名当前窗口
Ctrl+b . 修改当前窗口编号(适用于窗口重新排序)
Ctrl+b f 快速定位到窗口(输入关键字匹配窗口名称)

面板(pane)

前缀 指令 描述
Ctrl+b " 当前面板上下一分为二,下侧新建面板
Ctrl+b % 当前面板左右一分为二,右侧新建面板
Ctrl+b x 关闭当前面板(关闭前需输入y or n确认)
Ctrl+b z 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增)
Ctrl+b ! 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)
Ctrl+b ; 切换到最后一次使用的面板
Ctrl+b q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
Ctrl+b { 向前置换当前面板
Ctrl+b } 向后置换当前面板
Ctrl+b Ctrl+o 顺时针旋转当前窗口中的所有面板
Ctrl+b 方向键 移动光标切换面板
Ctrl+b o 选择下一面板
Ctrl+b 空格键 在自带的面板布局中循环切换
Ctrl+b Alt+方向键 以5个单元格为单位调整当前面板边缘
Ctrl+b Ctrl+方向键 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)
Ctrl+b t 显示时钟

进阶使用

查看手册

1
man tmux

简洁手册

Terminal利器——tldr - 简书

强推一个开源工具tldr->Too Long, Don't Read

  • 喜欢node可以用:sudo npm install -g tldr

  • 习惯Python的:pip install tldr

  • 偏爱Go的:go get github.com/pranavraja/tldr

  • 热爱Ruby的:gem install told

tldr对tmux解释很简洁

tldr

目前还没有更多的使用场景, 配置文件修改的内容后续再补充, 参见原博文

增加常用的配置项

🆙2022-06-02

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 绑定重新载入配置文件为r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."

# 垂直方向新增面板,默认进入当前目录
unbind '"'
bind - splitw -v -c '#{pane_current_path}'

# 水平方向新增面板,默认进入当前目录
unbind %
bind \\ splitw -h -c '#{pane_current_path}'

# 启用鼠标支持

# VERSION <= v2.1
# setw -g mode-mouse on # 支持鼠标选取文本等
# setw -g mouse-resize-pane on # 支持鼠标拖动调整面板的大小(通过拖动面板间的分割线)
# setw -g mouse-select-pane on # 支持鼠标选中并切换面板
# setw -g mouse-select-window on # 支持鼠标选中并切换窗口(通过点击状态栏窗口名称)

# VERSION > v2.1
set-option -g mouse on # 等同于以上4个指令的效果