TMUX 类似于 screen,是一个窗口管理器,而且功能更加强大,提供了强劲的、易于使用的命令行界面,可横向和纵向分割窗口,支持 UTF-8 编码及 256 色终端等特性。
接下来简单介绍下 TMUX 的使用。
简介
如上所述 tmux 是一个终端复用软件,类似于 GUN Screen,tmux 可以在终端中使用,同时可以在 ssh 中使用,其中可以开启多个控制台。
上图是官网上的一个截图,将屏幕分为了多个窗口,方便进行管理。
tmux 使用 C/S 模型构建,分为以下单元模块:
-
Server,服务器。一个 tmux 命令执行后启动一个 tmux 服务;
-
Session,会话。一个 tmux 服务可以拥有多个 session ,一个 session 可以看作是 tmux 管理下的伪终端的一个集合;
-
Window,窗口。一个 session 可能会有多个 window 与之关联,每个 window 都是一个伪终端,会占据整个屏幕;
-
Pane,面板。一个 window 可以被分割成多个 pane ,每个都是一个 pty ,可以通过 tty 命令查看。
基本结构如下图所示。
tmux 所支持的特性包括了:
-
支持 UTF-8 编码及 256 色终端。
-
可在多个缓冲区进行复制和粘贴。
-
可通过交互式菜单来选择窗口、会话及客户端。
-
支持跨窗口搜索。
-
支持自动及手动锁定窗口。
另外,通过 libevent 提供高性能。
安装
在 CentOS 中可以通过 yum 安装,也可以按照如下方式,采用源码安装。先从 tmux.sourceforge.net 上下载源码。tmux 需要有 ncurses 和 libevent 的支持,需要 libevent-2.0 版本,而通过 yum 只能安装低版本的,所以使用源码编译,安装过程如下。
在 Ubuntu 中可以通过 apt-get install tmux 直接安装。
启动
第一次会产生一个新的 session 和 window ,在下方会显示其状态,如果意外断开 (detach) 连接,session 仍会在后台运行,每个窗口可以分为多个 pane 。
启动时的参数选项有:
- -2: 强制 tmux 假设终端支持 256 色。
- -8: 类似于 -2 ,不过是强制 tmux 假设终端支持 88 色。
- -c shell-command: 使用默认的 shell 执行命令,主要用于当 tmux 作为 login shell 时使用。
- -f file: 指定配置文件,默认检查 /etc/tmux.conf、~/.tmux.conf,如果有命令错误,则会直接退出。
- -V: 查看版本号。
默认 tmux 会创建的匿名的 session ,可以通过如下命令创建一个命名的 session , Ctrl-b 是命令前缀(Command prefix),通过前缀告知 tmux 下面的命令是发给 tmux 的,而非终端。常见的操作如下。
如下是各种常用的命令。
常用快捷键
默认采用 Ctrl-b 作为 prefix,用于激活控制台。
常见操作
如何在 tmux 内新建会话。
窗口(Windows)操作
如果窗口没有命名,会以当前命令作为窗口名。
面板(Panes)操作
另外,可以通过 <prefix>+space 在预置的面板布局中循环切换;依次包括 even-horizontal (横向平铺)、even-vertical(垂直平铺)、main-horizontal(大的 panes 在顶部,底部会有很多小的 panes )、main-vertical(大的 pane 在左边,右边很多小的 panes )、tiled(平均分配各个窗口) 。
其它
定制 tmux
tmux 的系统级配置文件为 /etc/tmux.conf ,用户级配置文件为 ~/.tmux.conf 。
有些资料中建议修改 Prefix 组合键,如 CapsLock 和 A 相邻,可以将 CapsLock 映射为 Ctrl (需要使用操作系统的键盘映射),并将 Prefix 的 Ctrl-b 重定义为 Ctrl-a ,这样的话可以非常方便的使用。
但是在 Linux 操作中会与 Bash 的 Ctrl-A 冲突,因此没有修改该键,主要是因为 Prefix 只有在调整 tmux 才会使用。如上的配置,可以在命令行中执行如下命令查看:
如下是常用的配置文件示例。
定制 tmux 启动脚本
tmux 脚本,可以参考 tmux_basic 脚本,实际上是一个 shell 脚本,可以通过如下命令的进行不同的组合。也就是通过运行该脚本,生成最终的 tmux 初始环境。
实际是一个 Shell 脚本,当然 tmux 的配置文件也可以进行相同的设置。
可以将上述的命令放置到 tmux.conf 配置文件中,此时将会自动执行,也可以将其放置到不同的文件中,然后通过 tmux -f 指定相应的配置文件,第一行中指定需要加载默认配置文件。
tmux 的默认行为是新建一个 session ,因此如果没有使用 attach 选项,那么实际会再新建一个 session ,此时会导致有两个 session 。
颜色设置
可以从 colortest 上下载该文件,也可以使用 本地文档,通过如下命令测试终端;并在 ~/.bashrc 添加如下内容,此时只会在 TMUX 外设置 TERM ,而 TMUX 会设置自己的终端。
tmux 支持指定特定的颜色,包括了 black, red, green, yellow, blue, magenta, cyan 和 white,也可以使用 colour0 到 colour255 ,可以简单的通过如下命令查看。
tmux 的各个组件可以通过前景色和后景色进行设置。
在 Putty 中,右击 -> Change Settings… -> Window -> Colours 选中, Allow terminal to specify ANSI colours 和 Allow terminal to use xterm 256-colour mode ,并在 Indicate bolded text by changing: The colour 。
tmux 启动时可以使用 -2 参数,此时 tmux 会强制假设终端支持 256 色。
设置状态栏
状态栏由三部分组成:右面板、窗口列表、左面板。左右面板可以使用文本和变量,常见变量如下所示。
合作
通过 tmux 可以两个人进行合作,在一个窗口上的操作可以被另一个人看到。最简单的是同一个用户 (Shared Account),此时一个人创建一个窗口,另一个人 attach 即可。
使用同一个用户 (Shared Account) 和分类会话 (Grouped Sessions) ,此时与上述的相似,不过当一个用户切换时,另一个用户不会看到。这样的话,当两个人需要使用不同的编辑器进行编译时,可以各自创建一个新的窗口,各自不会影响。
使用不同的用户,假设为 foo 和 bar 。这种情况下,两个人可以使用不同的配置选项,如快捷键、状态栏等属性。
其它
1. pane 转为 window
通过 Prefix ! 可以将一个 pane 转作 window。
2. pane 合并到 window
如果想将一个 pane 合并到 window ,可以在 tmux 中通过如下命令执行。
如果没有通过 -t 指定目标,那么默认为当前的 window ,在指定 pane 时,目标通过 [session_name]:[window].[pane] 指定。
3. 判断是否存在 session
在一个 Bash 脚本中,可以通过如下的命令查看是否存在一个 Session 。
4. 设置默认 bash
tmux 默认使用的是 bash ,如果要使用其它的终端,可以在 tmux.conf 中通过如下的命令指定。
5. TERM设置
当 tmux 运行时,会将 TERM 变量设置为 “screen” 或者配置文件中 default-terminal 指定的值,在 .bashrc 中可以通过判断该变量来确定现在是否在 tmux 中。
如果不在 tmux 中,那么首先尝试连接 $USER ,也就是 Session 为用户名;如果链接失败则会尝试新建一个,然后退出脚本。
当启动 tmux 时,仍会执行配置文件,但是由于这次在 tmux 中,因此跳过这段指令。
6. 窗口切换
将窗口在 Session 之间进行切换,使用时通过 Prefix . ,并在命令行中输入想要切换的 Session。当热也可以通过如下的命令执行
将 processes 的第一个 window 移动到 editor 。
putty 乱码设置
在通过 putty 链接 tmux 时,可能会出现乱码,此时需要设置字符集。[右键] => [Change Settings…] => [Windows/Translation] => [Remote character set:] 改为 UTF-8 。
参考
详细内容可以参考官方网站 tmux.github.io,详细的文档可以参考 tmux Productive Mouse-Free Development,版权归作者所有。
当然也可以通过 tmux-powerline 配置状态栏;关于按键的绑定可以参考 Moving The Ctrl Key 。