这篇文章记录一下 tmux 的一些基本使用方法。

什么是 tmux ?

你可以通过搜索很容易地知道 tmux 是用来做什么的,但如果让我一句话说明的话,tmux 就是一个帮助我们保存命令行下的工作状态,以及帮助我们在命令行里划分工作区域的工具。这样的理解可能过于简单,没有深究其中的细节,但这个简单的概念阐释体现出了我觉得 tmux 最有用的两个地方:

  • 如果因为误操作或电脑死机而导致终端被关闭,tmux 能够保证我们的工作状态不丢失
  • tmux 让我们在终端下有和 IDE 类似的工作区/窗口管理体验
    • tmux 能够让我们建立多个工作区。比如打开两个不同的项目,只不过是在一个命令行窗口下,就像在 IntelliJ 里打开多个项目然后 merge windows 的感觉
    • 每一个工作区里我们也可以将屏幕划分为多个区域,就像我们在 IDE 里分屏查看文件,或者一边编辑文件一边在内置命令行里操作一样

需要注意,上面表述的时候,诸如「工作区」、「窗口」等用语可能或多或少和 tmux 本身定义的一些术语概念有混淆,这里的用法都不是指的严格定义,而是在自然表述下的说法。

tmux 的一些基本使用

那么好,在大概知道 tmux 是什么之后,我们就看看它的一些简单使用。这里不做文档式的罗列,只是记录我最近两天用到过的一些命令,以防忘记。

新建/退出/重新进入/重命名 session

tmux new -s <session-name> 可以创建一个新的 session,执行后会立即进入,命令行底部的状态栏会告诉我们已经进入了 tmux 的世界。

tmux 的操作可以通过类似于 Vim 命令模式的方式执行,但是大多数情况下我们都是通过快捷键来进行的,这也是 tmux 高效的精髓。

先学会如何退出 session,回到原点:

  • ctr-b d 是 detach 操作,执行之后我们退出 tmux,底部状态条消失。

如果想进入之前创建的 session,首先得知道有哪些 session,很可能碰到已经忘了 session 名字的情况:

  • tmux ls 来 list 出所有的 session,我们可以看到刚刚创建出来的 session 被列出。这些 session 就是 tmux 会帮我们保存的工作状态,当重新进入的时候我们会原封不动地回到退出时候的原始状态。

之后我们可以重新 attach 到这个 session:

  • tmux att -t <session-name>

如果我们想要重新命名 session,可以在处于 tmux 的时候按下 ctrl-b $,然后底部状态栏变黄,等待我们重命名。

窗口操作(多个工作区)

进入一个 session 之后,我们会处于默认的窗口,当前只有这一个。

创建新的窗口,我们可以使用 ctrl-b c 创建一个新窗口,然后就会注意到底部状态栏多了一个窗口标识,我的情况是 [demo] 0:zsh- 1:zsh*,因为我的 session 叫 demo,然后我的两个窗口都默认叫做 zsh,其中窗口1后面的星号表明这是当前窗口,默认情况下创建完新窗口自动切换过去。窗口0后面的-表示这是上一个激活的窗口。

切换窗口,我们有多种方法:

  • ctrl-b n 按顺序切换到下一个窗口(next)
  • ctrl-b p 按顺序切换到上一个窗口(previous)
  • ctrl-b l 切换到上一个激活的窗口(last)
  • ctrl-b <数字> 可以切换到对应的窗口

想要关闭窗口,我们也有多种方法:

  • ctrl-d 可以直接关闭窗口,但是目前似乎和 Vim 的按键有冲突,在普通命令行界面执行没问题
  • ctrl-b & 依然是通过 prefix 来触发,而且这种方法会在底部状体栏进行删除确认,以防止误操作

窗口也可以重命名,我们自然希望按照不同项目来命名各个窗口:

  • ctrl-b , 依然是在底部状态栏进行重新编辑,回车生效

划分窗格(窗口分屏)

我们可以以水平线划分窗口:

  • ctrl-b "

也可以以垂直线划分窗口:

  • ctrl-b %

我们的窗口划分永远是划分当前所在的那个“小窗口”(tmux 里叫窗格)的,因此是当前窗格被继续划分下去的。

关闭当前窗格:

  • ctrl-b x 状态栏进行确认

需要注意的是,如果当前窗口只有一个窗格,那么关闭窗格就是关闭这个窗口(ctrl-b x 或许比 ctrl-b & 更好记一点,但一般一个窗口可能不止一个窗格)。

在窗格间切换,以及如何用鼠标操作

已经划分了多个窗格,那么如何在他们之间切换呢?

可以使用 ctrl-b + 方向键,但这种方式如果在划分多个窗格的时候可能有些不好用。如果左边一个窗格,右边两个窗格,那么方向键为右的时候到底是切换到哪个窗格呢?我们很可能还需要再按一次。

这里介绍一下如何设置,让我们可以用鼠标来切换窗格,在点击到对应的位置之后就切换过去:

  • 退出 tmux,在外面执行 tmux setw -g mouse on 即可

回到 tmux 之后,我们就会发现,不仅可以用鼠标点击切换激活窗格,而且还可以用鼠标拖动窗格的边界来 resize 它们。Cool!

我知道 tmux 以及 Vim 的哲学都是尽量纯键盘操作,这里通过鼠标切换可能不是最高效的方式。但是目前我的键盘操作还不是特别熟练,作为中间过渡,有时候能用鼠标切换一下还是挺方便的。暂且先这样。

这里再补充一下,resize 如何用键盘操作呢?

  • ctrl-b option 方向键 这是在 mac 上的操作

最后

如果想要更多了解关于 tmux 的使用和配置,可以参考一下资料:

这篇文章只是记录自己永远搜索,至今还没肌肉记忆的 basic usage 😹。