Tmux简明教程

前言

你经常可能会遇到这样的情况:你在vim编辑你在远程服务器上面的代码,然后你要新开一个窗口再次ssh到
这个远程服务器来测试运行你的代码。此外,如果你的WIFI断线了,你的所有session都会挂掉,GG。
然后你又要麻烦地重新开两个session。

其实,上述问题都可以用tmux解决,一个可以提供如下功能的命令行工具:

  1. 在一个terminal window内开启多个windows,panes。
  2. 在一个session内(这个session会一直保持着,即使断网的时候也会保持着)保持windows和panes。
  3. 能够共享session(这功能对结对编程来说真是太妙了!),就是说,你在session上做得所有操作,
    在另一台电脑上连接到同一个session,会看到同样的输入和输出。

正文

安装

Ubuntu用户只需要执行sudo apt-get install tmux
Mac 用户只需要执行brew install tmux

安装完后,执行如下:

1
tmux


这看起来和普通的终端差不多,除了底下有条绿色的状态bar。在这个bar上,我们可以运行tmux命令去控制管理终端windows和sessions

Tmux基本命令:

当你进入到tmux后,你可以通过先运行一个prefix key来执行各种命令。默认来说,tmux的prefix key是 ctrl + b。也就是说在执行
其他任何命令之前你都要先同时按下ctrl + b。

tmux的命令有很多很多,但首先我们了解下基本的就好了,如下:

1
2
3
4
5
6
7
<prefix> c: 创建一个新的window(在status bar中显示)
<prefix> 0: 切换到 window 0
<prefix> 1: 切换到 window 1
<prefix> 2: 切换到 window 2 (etc.)
<prefix> x: Kill 当前的window
<prefix> w: 切换 window
<prefix> d: detach 到tmux(也就是说当你离开后,再次回到session中)

如果你把在tmux session的所有的window都kill后,它将会kill整个session并且回到普通的终端上。
如果你用 d 去 detach到tmux,你将会回到你的tmux session,而且你可以看到你之前运行的东西已然在那里。
要查看所有的tmux sessions,你可以使用:

1
tmux ls

要attach到最后一个使用的session,你可以用:

1
tmux a

要attach到指定的某个session,你可以用:

1
tmux a -t <session-name>

这里补充说明下 session 和 window之间的关系,我们看看这个图,
一个window相当于你的显示器能看到的所有东西,然后一个window上可以分成一块块的拼图,也就是各个panes:

这就这么一些。现在你可以通过多个终端window和永久的sessions来在你的远程电脑上工作了。
你甚至可以通过让两个人attach到同一个session来进行结对编程!

下一步

上面的命令对掌握tmux真的非常有用。通常,我尽量少开窗口,一般是一个window用于vim,另一个window做开发,第3个窗口去运行命令。
大多数人倾向于用panes来在同一个屏幕上展现多个内容。

Panes是个特别炫酷的东西而且很值得学习,但是推荐你们先放一放,不要急着学习太多panes的东西,因为它会增加你的tmux学习曲线。
当你用panes时候,你要记住水平和垂直创建panes的命令,还有切换不同panes的命令,还有改变panes大小,关闭panes的命令,等等等等。
所以我建议先把其它的玩熟练再去用panes这些花哨的东西。

你也可以通过在home目录下添加.tmux.conf文件来指定tmux的一些配置。
比如通常可以在里面改变 prefix的快捷键(很多人会使用ctrl+a 作为prefix)。
初始window数设置为1,而不是0;然后还可以设置下颜色。
如果你打算重新绑定prefix,很有可能这将会为你以后形成肌肉记忆了,哈哈。

下面是一个精简版的.tmux.conf, 只改变了window数和 prefix:

1
2
3
4
5
6
7
8
9
10
# remap prefix from 'C-b' to 'C-a'
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# Start window numbering at 1
set -g base-index 1
# 建议加上这个,用鼠标会有很大惊喜,呵呵。在多个panes的时候切换用鼠标点一下就好了!
# 同时也解决了scroll的问题,可以轻松地用鼠标在不同的panes内滚动!
set -g mouse on

tmux有非常多的可选配置,但是你得由浅到深,刚开始尽可能精简。当你想尝试一些更高级的功能时,不要在网上复制粘贴。
你必须清楚.tmux.conf的每一个配置的作用是什么。

一旦你感觉你掌握了基础,将会有很多好玩的高级tmux游戏等着你。