UNIX环境下使用tmux在虚拟终端复用窗口的方法

2015-04-26 wcdj


摘要:在前文《UNIX环境下使用screen在虚拟终端复用窗口的方法》介绍了GNU screen的使用方法,本文继续介绍screen的升级版工具OpenBSD tmux,因为tmux的功能更强大。


0 tmux的介绍

关于tmux的介绍,在Ubuntu(apt-get安装)上的效果如下图所示,Mac OS X上使用brew install tmux安装,Linux上源码安装方法如下:

tar zxvf libevent-2.0.21-stable.tar.gz
./configure --prefix='/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable' && make && make install

tar zxvf ncurses-5.9.tar.gz
./configure --prefix='/data/home/gerryyang/LAMP/ncurses/install/ncurses-5.9/' && make && make install

tar zxvf tmux-1.9a.tar.gz
./configure --prefix='/data/home/gerryyang/LAMP/tmux/install/tmux-1.9a' CFLAGS='-I/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable/include' LDFLAGS='-L/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable/lib' && make && make install

最后再在.bashrc下添加如下两行配置
# tmux
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable/lib
alias tmux='/data/home/gerryyang/LAMP/tmux/install/tmux-1.9a/bin/tmux'

UNIX环境下使用tmux在虚拟终端复用窗口的方法_第1张图片


看完此图是不是有一种非常hack的感觉,tmux除了支持screen的会话管理之外,最直观的还提供了窗口分割的功能,除此之外还有很多优点(摘抄参考[2]的总结):

  • 垂直分割窗口,当然水平也是可以的
  • vi 或 emacs 按键绑定模式
  • 有多个粘贴缓冲,可完全由按键进行选取、复制、以及粘贴操作
  • 配置很容易,尤其是状态行
  • 脚本化,通过脚本可以方便的控制 tmux 会话
  • 有预设布局,可搜索窗口,自动命名窗口名称
  • 文档清晰、详尽

mux使用C/S模型构建,主要包括以下单元模块:(理解下面几个模块的含义,有助于对tmux的使用)

server 服务器。输入tmux命令时就开启了一个服务器。
session 会话。一个服务器可以包含多个会话。
window 窗口。一个会话可以包含多个窗口。
pane 面板。一个窗口可以包含多个面板。

1 tmux的使用场景

使用 tmux 创建一个新会话,在新的会话中使用 ctrl-b + c 可以继续创建新的window(窗口),输入 exit (或者使用 ctrl-b + &)就会关闭当前的window (窗口)。而在 tmux 创建的新会话中输入 ctrl-b + d/D 则会退出会话。此时如果再输入 tmux 则会再重新创建一个新的会话(与之前的第一个会话并列),当然也可以输入 tmux attach 再次attach到最近退出的那个会话。如果之前存在多个会话,在attach到会话后,可以通过输入 ctrl-b + s 然后通过上下键来选择要切换的会话,如下图所示。



也可以在进入tmux会话之前查看tmux会话有哪些,然后attach到某一个会话。

tmux ls
0: 1 windows (created Mon Apr 27 22:47:22 2015) [210x62] (attached)
1: 1 windows (created Mon Apr 27 22:52:15 2015) [210x62] (attached)
tmux at -t 0

2 tmux的常用配置

类似各种平铺式窗口管理器,tmux使用键盘操作,常用快捷键包括:

Ctrl+b 激活控制台;此时以下按键生效
系统操作 ? 列出所有快捷键;按q返回
d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
D 选择要脱离的会话;在同时开启了多个会话时使用
Ctrl+z 挂起当前会话
r 强制重绘未脱离的会话
s 选择并切换会话;在同时开启了多个会话时使用
: 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
[ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
窗口操作 c 创建新窗口
& 关闭当前窗口
数字键 切换至指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 在前后两个窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口;这样便于识别
. 修改当前窗口编号;相当于窗口重新排序
f 在所有窗口中查找指定文本
面板操作 将当前面板平分为上下两块
% 将当前面板平分为左右两块
x 关闭当前面板
! 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
Space 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 显示面板编号
o 在当前窗口中选择下一面板
方向键 移动光标以选择面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板

3 tmux的配置

tmux的系统级配置文件为/etc/tmux.conf,用户级配置文件为~/.tmux.conf。配置文件实际上就是tmux的命令集合,也就是说每行配置均可在进入命令行模式后输入生效。


4 Refer

[1] http://en.wikipedia.org/wiki/Tmux

[2] https://linuxtoy.org/archives/from-screen-to-tmux.html

[3] https://wiki.freebsdchina.org/software/t/tmux

[4] http://tmux.sourceforge.net/



你可能感兴趣的:(Mac,OS,X/iOS,GNU/Linux,Tools)