多终端管理器tmux

程序员利器


多终端管理器tmux

tmux

为什么要用tmux

tmux是什么?tmux是linux中一种管理窗口的程序。那么问题来了:Mac自带的Iterm2很好用啊。既支持多标签,也支持窗体内部Panel的分割,为什么还要用tmux?其实,多标签和分割窗体只是tmux的部分功能。用tmux的主要原因是它提供了一个窗体组随时存储和恢复的功能。看看以下的使用场景是否适合你:


tmux的基本概念

我们先来理解下tmux的几个元素。tmux的主要元素分为三层:

为了更好的理解,下面是三个元素在tmux中的具体展现。

concept

可以看到Session总在tmux的左下角显示,通常会为他命名。例如我正在写博客,开了很多窗口那么我就会把这组窗口命名为blog方便之后的重连和切换。而Window也会在最下方以一种Tab的形式展现。每个window都有自己的需要,也会以当前活动进程的名字命名。而Pane就比较好理解,即把单个窗口分割成若干个小块后的元素。


tmux的基本操作

Prefix-Command前置操作:所有下面介绍的快捷键,都必须以前置操作开始。tmux默认的前置操作是CTRL+b。例如,我们想要新建一个窗体,就需要先在键盘上摁下CTRL+b,松开后再摁下n键。

下面所有的prefix均代表CTRL+b

Session相关操作

操作|快捷键 -|- 查看/切换session| prefix s 离开Session| prefix d 重命名当前Session| prefix $

Window相关操作

操作|快捷键 -|- 新建窗口|prefix c 切换到上一个活动的窗口|prefix n 关闭一个窗口|prefix & 使用窗口号切换|prefix 窗口号 name window|prefix , find window|prefix f

Pane相关操作

操作|快捷键 -|- 切换到下一个窗格|prefix o 查看所有窗格的编号|prefix q 垂直拆分出一个新窗格|prefix “ 水平拆分出一个新窗格|prefix % 暂时把一个窗体放到最大|prefix z


tmux常用功能

竖直方向分割屏幕结合使用 Vim,而在另一边查看代码运行结果.

从图中可以看出:

要创建一个竖直放置的窗格很容易,待开启了一个 Tmux 会话之后,只需再按下 Ctrl-b % ,一个竖直窗格就出现了。另外,若要把屏幕沿水平方向分割,则只需要按下 Ctrl-b “。在 Tmux 的窗格间移动光标也很简单,只需要先按下 Tmux 的快捷键前缀,然后再按下对应的方向键就可以让光标进入到目标窗格了。

窗口间的文本复制粘贴

把 Tmux 设为 vi 模式,使其与 Vim 的操作更加接近。为此,需要将以下配置加入到文件 ~/.tmux.conf 中。

# Use vim keybindings in copy mode
setw -g mode-keys vi

首先按下 Ctrl-b [ 进入复制模式,然后可以看到一小段高亮的文本出现在了屏幕的右上角 (“[0/0]”)(如下图所示)

接下来就可以像在 Vim 中一样用 j、k、l 和 h 等键在文本间移动光标了。把光标移动到想复制的文本上后再按下空格键就可以开始选择文本了(这和在 Vim 中复制文本的步骤一模一样)。选择完要复制的文本后再按下回车键。这样 IP 地址就复制下来并可以粘贴到任何地方了。我们还可以通过修改tmux配置让上述选择/拷贝/粘贴的快捷键更符合Vi风格

# 按下<Escape>进入拷贝模式,v进行选择,y拷贝所选内容,p进行粘贴
bind Escape copy-mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-pipe "xclip -sel clip -i"
unbind p
bind p pasteb

开启批量执行

例如模拟一个多终端的并发测试,多开几个pane,Ctrl+b后输入:set synchronize-panes ,输入:set sync [TAB]键可自动补齐,批量执行任意一个pane输入的指令