tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.

基本概念

tmux 是一个终端管理,多终端分屏软件,将终端窗口组合视为工程(回话),同时还解决了 SSH 超时 broken pipe 的问题,配合 zsh、vim 就是神器,同一个会话可以被多人打开,实现教学同步演示的目的,tmux 主要包括以下几个概念:

  • session 会话:一个服务器可以包含多个会话
  • window 窗口:一个会话可以包含多个窗口
  • pane 面板:一个窗口可以包含多个面板

运用上面的会话、窗口、面板可以打造一个可以移动的“终端 IDE”,类似的终端复用工具还有如 screen。在 windows 上建议使用 mintty,mintty 和 tmux 的下载安装,具体参考之前的关于 MSYS2 的文章,对于 Linux 和 Mac 来说终端软件就随意了,安装的话使用该平台的包管理就可。

会话管理

在终端里使用 tmux 命令可以新建或者进入会话。

  • tmux 开始一个新 tmux 会话
  • tmux new -s myname 开始一个名为 myname 的 tmux 会话,也可以新建然后从新命名
  • tmux a -t myname 打开 (attache) 名为 myname 的 tmux 会话
  • tmux a #num 打开 (attache) 编号为#的 tmux 会话
  • tmux ls 列出所有的 tmux 会话
  • tmux kill-session -t myname 清除名为 myname 的 tmux 的会话
  • tmux kill-server 删除所有的会话

注意 tmux 的 detach 是后台运行,所以当关机后就会丢失,如果要持久化可以采用 tmux-resurrect 插件来完成。

基础命令

在一个 tmux 会话里,唤醒 tmux 的命令是需要前缀命令的,tmux 的默认前缀命令是 Ctrl+b,下文所有命令的默认前缀命令 Ctrl+b 为了篇幅,都是已经忽略了的。

  • ? 列出所有快捷键;按 q 返回
  • d 脱离当前会话,可暂时返回 Shell 界面,输入 tmux attach 能够重新进入之前会话
  • s 选择并切换会话;在同时开启了多个会话时使用
  • D 选择要脱离的会话;在同时开启了多个会话时使用
  • : 进入命令行模式;此时可输入支持的命令,例如 kill-server 所有 tmux 会话
  • [ 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc 退出,复制模式下即可以通过上下键来滚动屏幕
  • ] 进入粘贴模式,粘贴之前复制的内容,按 q/Esc 退出
  • ~ 列出提示信息缓存;其中包含了之前 tmux 返回的各种提示信息
  • t 显示当前的时间
  • r 刷新 (reload)
  • # 显示 copy 的 buffer 历史
  • = 选择 copy 的 buffer

会话 session

  • s 查看/切换 session
  • d 离开 session (detach)
  • $ 重命名会话

窗口 window

  • c 创建新窗口 (create)
  • & 关闭当前窗口
  • , 重命名窗口
  • w 查看所有 session 和下面的 window 及下属的 panel
  • [num] 使用窗口号切换
  • . 窗口编号
  • f 所有窗口中查找关键词
  • p 切换到先前的窗口
  • n 切换到下一个窗口

窗格 pane

  • % 左右平分出两个窗格
  • " 上下平分出两个窗格
  • z 最大化当前窗格,再次执行可恢复原来大小,配合 vim 很爽
  • x 关闭当前窗格
  • q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格
  • 方向键 根据方向键跳转一个窗格
  • o 循环切换 pane
  • space 切换窗格布局,tmux 内置了五种窗格布局
  • ; 选择上次使用的窗格

pane 调整快捷键。

  • { 当前窗格位置前移
  • } 当前窗格位置后移
  • ! 将当前窗格升级为窗口
  • Ctrl + 方向键 移动边缘以调整当前面板大小
  • Alt + 方向键 以 5 个单元格为单位移动边缘以调整当前面板大小

状态栏

一般默认的格式和对应的配置名如下:

1
2
[test] 0:font-window* 1:zsh-           "MacBook-Pro-8.local" 17:20 16- 7-18
[sessionName] windowNum:windowName+status[*|-] windowNum:windowName+status[*|-]

配置文件

一般 tmux 的配置会放在 ~/.tmux.conf 下,配置完成后需要使用 tmux source-file ~/.tmux.conf 命令来完成刷新设置,总的来说我建议不要修改已有的快捷键,当机器多了之后会导致混淆,参考配置

@import “/Snippets/dotfile/tmux.conf”

对上面的配置文件的一些解释:

  • tmux 如果嵌套了,按几次 ctrl+b 就是进入嵌套层次的次数,如按两次 ctrl+b。最好的方式还是使用配置文件来解决,也就是给出的配置的注释 # nested 的部分,配置之后按 F12 即切换外围 tmux 的 prefix 的传入,来源参考文末的连接。

  • 建议在本地的机器上用,全套的配置。远程的机器用 # my theme 注释以上的简单配置,以加以区分。

  • 配置里面是能使了鼠标的,也就是可以使用鼠标切换 Pane 和 Windows,也能使用鼠标调整 pane 的大小,滚轮上下查看历史等功能,鼠标选择文本等功能。

  • 一般来说 tmux 的复制会比麻烦,折腾起来也麻烦,建议的是直接用终端软件的文本选择模式如 mintty 是按住 shift 键用鼠标选择,iterm2 是按住 option 键用鼠标选择。

使用问题

  • 有时 tmux 里的颜色会不太正常,在 shell 初始化脚本里面加入如 export TERM=xterm-256color。参考colors

参考