tmux,即 terminal multiplexer,它是一个终端复用工具。
tmux is a “terminal multiplexer”, it enables a number of terminals (or windows) to be accessed and controlled from a single terminal. tmux is intended to be a simple, modern, BSD-licensed alternative to programs such as GNU screen.
使用它最直观的好处就是,通过一个终端登录远程主机并运行 tmux 后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。 —— 百度百科
iTerm2 的分屏功能,其实就新建了一个新的窗口,因此当前窗口的工作内容不会同步到新的窗口。tmux 的分屏,默认进入到之前的路径,而且还能保存之前的 ssh 连接。
tmux 还有一个重要功能,就是保存当前会话。假如你使用 ssh 远程连接服务器来工作,当断开连接后,tmux 的会话一直在后台运行(如果一个命令执行时间过长,也不用等它结束后才能断开连接)。下次重新连接服务器后,可以直接还原会话继续之前的工作。
tmux 还能回话共享,别人可以 ssh 连接到服务器,进入你的会话,你的操作对方就可以看见。
tmux 最重要的功能是会话管理和窗口管理。tmux 可以创建多个会话,每个会话可以创建多个窗口,每个窗口可以分成多个面板(panel)。退出当前会话的行为叫做 detach。还原之前会话的行为叫做 attach。
安装
Ubuntu 安装方法:sudo apt-get install tmux
Mac 安装方法:brew install tmux
开始使用
直接在终端输入 tmux
,tmux 就创建了一个会话。终端会打开一个新的 窗口
,下面有绿色的状态栏,左边是当前窗口的信息,右边是系统时间/日期等信息,这个状态栏可以自定义。
目前只有一个 会话
,这个会话里面只有一个窗口,这个窗口里面只有一个 面板
。
tmux 的所有命令都用 ctrl+b
作为前缀。下面是一些常用快捷操作。
面板(panel)操作
ctrl+b %
:将当前窗口分为左右两个面板ctrl+b "
:将当前窗口分为上下两个面板ctlr+b 方向键
:切换面板,连续按方向键可以多次切换ctrl+b z
:最大化当前面板,重复此操作回复原来的大小ctrl+d
或者 ctrl+b x
或者在面板中输入 exit
:关闭当前面板ctrl+b ctrl+方向键
:以1个单元格为单位移动边缘以调整当前面板大小ctrl+b alt +方向键
:以5个单元格为单位移动边缘以调整当前面板大小ctrl+b space
:在预置的面板布局中循环切换ctrl+b q
:显示面板编号ctrl+b !
:将当前面板置于新窗口,需要当前窗口有多个面板。ctrl+b o
:在当前窗口中选择下一面板ctrl+b {
:向前置换当前面板ctrl+b }
:向后置换当前面板ctrl+b ctrl+o
:顺时针旋转当前窗口的面板
窗口(window)操作
ctrl+b c
:创建新的窗口。可以在下面的状态栏看到窗口的个数和当前在哪个窗口。ctrl+b &
:关闭当前窗口ctrl+b p
:切换到前面(previous)的窗口。ctrl+b n
:切换到后面(next)的窗口。ctrl+b number
:按照数字直接切换窗口。ctrl+b ,
:重命名当前窗口ctrl+b .
:修改当前窗口编号,相当于窗口重新排序ctrl+b l
:在前后两个窗口间互相切换ctrl+b w
:通过列表的形式列出当前所有会话的所有窗口,随意选择ctrl+b f
:在所有会话的所有窗口中查找,并以列表的形式列出
会话(session)操作
如果 tmux 仅仅支持面板操作和窗口操作,那这些功能 iterm2 也能够实现,tmux 最重要的功能是可以操作会话。
新建会话
tmux
创建一个没有名称的回话tmux new -s name
创建会话并命名为 name
ctrl+b :
进入命令行模式,此时可输入支持的命令。比如输入 new -s name
,就可以在会话中直接创建新的会话,不用退出来;再比如输入 kill-server
,关闭所有 session。
断开会话
ctrl+b d
或者输入 tmux detach
:退出当前会话(detach),但是会话仍然在后台运行,之后输入 tmux attach
重新打开这个会话(attach)。
ctrl+b ctrl+z
: 挂起当前会话,返回 Shell 界面,会话还是 attach 状态
恢复会话
tmux attach
连接到之前的会话tmux attach -t name
连接到指定会话,name 是会话的名称,显示在会话列表的最前面。
(attach 可以简写为 a ?)
关闭会话
在当前面板中输入 exit
,退出了当前会话,并且这个会话已经彻底没有了,没有在后台运行。tmux kill-session -t name
关闭名称为 name 的会话tmux kill-server
关闭服务器,所有的会话都会关闭ctrl+d
退出会话
查看会话
tmux ls
列出当前所有的会话和它们的状态
切换会话
ctrl+b s
:选择并切换会话,在同时开启了多个会话时使用
ctrl+b D
:选择要脱离的会话,在同时开启了多个会话时使用。ctrl+b ?
:列出所有快捷键,按q返回ctrl+b [
: 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc退出ctrl+b ]
: 进入粘贴模式,粘贴之前复制的内容,按q/Esc退出ctrl+b t
: 显示当前的时间tmux rename-session -t 0 database
重命名会话 0 为 database
配置
配置快捷键
tmux 的配置文件是 tmux.conf
,当前用户的配置在~/.tmux.conf
,不同系统的全局配置位置不同,可以通过 man tmux
查看,它的 -f
参数指定了全局配置位置。如图所示,该系统的全局配置文件在 /usr/local/etc/tmux.conf
。如果没有这些文件,可以自己创建。
另外,在使用 brew 安装 tmux 的时候,根据提示,我发现有一个实例配置文件在 /usr/local/opt/tmux/share/tmux/example_tmux.conf
,可以参考。
tmux 默认的前缀键 ctrl+b
,可以设置为其他。配置文件里面的 C
表示 Ctrl
键。
# Change the prefix key to C-a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
ctrl+a
在终端可以定位到行首,上面的设置可能让它不起作用。按两次 ctrl+a
就可以到行首。
"
和 %
把窗口分为 上下、左右两个面板,这个快捷键可能不太好记,可以用 -
和 |
来代替。
# split panes using | and -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
修改之后,使用 tmux source-file ~/.tmux.conf
使配置生效。
切换面板的时候,需要按 ctlr+b 方向键
,可以设置成 alt+方向键
。配置文件里面的 M
表示 Meta
,即 Alt
键。
# switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
正常情况下,点击鼠标点击不能切换面板,可以设置让鼠标可以用:
# Enable mouse mode
set -g mouse on
如果经常修改配置文件,还可以给上面的命令指定快捷键:
# reload config file (change file location to your the tmux.conf you want to use)
unbind r
bind r source-file ~/.tmux.conf
所有的配置可以使用 tmux show-options -g
查看。
其他一些配置示例:
# start with window 1 (instead of 0)
set -g base-index 1
# start with pane 1
set -g pane-base-index 1
# don't rename windows automatically
set-option -g allow-rename off
网上有大量的 tmux 配置文件,可以对界面进行各种配置。千万不要直接复制拿来用。好的方法是自己一个个尝试,一个个配置,你要知道自己使用那些配置所起的作用。
如果有问题,记得使用 man tmux
和 ctrl+b ?
。可以在这里查看 man tmux 的所有内容。