tmux是一个优秀的终端复用软件,即便非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络很差的状况下仍然能保证工做现场不丢失!此外,tmux彻底使用键盘控制窗口,实现窗口的切换功能。html
简单地说,tmux对于我主要有两个功能(这应该也是tmux的主要功能):git
split窗口。能够在一个terminal下打开多个终端,也能够对当前屏幕进行各类split,便可以 同时打开多个显示范围更小的终端。github
在 使用SSH的环境下,避免网络不稳定,致使工做现场的丢失。想象如下场景, 你在执行一条命令的过程当中,因为网络不稳定,SSH链接断开了。这个时候,你就不知道以前 的那条命令是否执行成功。若是此时你打开了不少文件,进入了较深层次的目录,因为网络 不稳定,SSH链接断开。从新链接之后,你又不得不从新打开那些文件,进入那个深层次的 目录。若是使用了tmux,从新链接之后,就能够直接回到原来的工做环境,不但提升了工做 效率,还下降了风险,增长了安全性。vim
sudo apt-get install tmux
安装完成后输入命令tmux便可打开软件,界面十分简单,相似一个下方带有状态栏的终端控制台;不出意外,这时候你会跟我第一次同样,以为tmux没什么牛逼的。安全
根据tmux的定义,在开启了tmux服务器后,会首先建立一个会话,而这个会话则会首先建立一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称做tmux的一个面板,虽然其使用方法与终端控制台彻底相同。服务器
tmux使用C/S模型构建,主要包括如下单元模块:网络
server服务器。输入tmux命令时就开启了一个服务器。session
session会话。一个服务器能够包含多个会话svn
window窗口。一个会话能够包含多个窗口。布局
pane面板。一个窗口能够包含多个面板。
这里须要说明一点的是,tmux的任何指令,都包含一个前缀,也就是说,你按了前缀(一组按键,默认是Ctrl+b)之后,系统才知道你接下来的指令是发送给tmux的。
C-b ? 显示快捷键帮助
C-b C-o 调换窗口位置,相似与vim 里的C-w
C-b 空格键 采用下一个内置布局
C-b ! 把当前窗口变为新窗口
C-b " 模向分隔窗口
C-b % 纵向分隔窗口
C-b q 显示分隔窗口的编号
C-b o 跳到下一个分隔窗口
C-b 上下键 上一个及下一个分隔窗口
C-b C-方向键 调整分隔窗口大小
C-b c 建立新窗口
C-b 0~9 选择几号窗口
C-b c 建立新窗口
C-b n 选择下一个窗口
C-b l 切换到最后使用的窗口
C-b p 选择前一个窗口
C-b w 以菜单方式显示及选择窗口
C-b t 显示时钟
C-b ; 切换到最后一个使用的面板
C-b x 关闭面板
C-b & 关闭窗口
C-b s 以菜单方式显示和选择会话
C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,能够经过tmux attach进入 到指定的会话
咱们先来看一下几个配置,这些配置才是我离不开tmux的缘由:-)。tmux的配置文件是~/.tmux.conf
,这个文件可能不存在,你能够本身新建。下面开始配置,首先,有没有以为tmux的前缀按起来太不方便了,ctrl与b键隔得太远,不少人把它映射成C+a,也就是在配置文件(~/.tmux.conf
)中加入下面这条语句:
#设置前缀为Ctrl + aset -g prefix C-a
与此同时,取消默认的前缀按键:
#解除Ctrl+b 与前缀的对应关系unbind C-b
配置完之后,重启tmux起效,或者先按C+b,而后输入:
,进入命令行模式,在命令行模式下输入:
source-file ~/.tmux.conf
你也能够跟我同样,在配置文件中加入下面这句话,之后改了只须要按前缀+r了。
#将r 设置为加载配置文件,并显示"reloaded!"信息bind r source-file ~/.tmux.conf \; display "Reloaded!"
关于前缀,不少人都喜欢改为Ctrl+a,不过我我的更喜欢Ctrl+x,若是你是vim用户,你必定懂的。还有就是面板的切换很不方便,须要先按前缀,再按方向键,还记得vim里面怎么切换各个面板的吗?tmux也能够,由于它支持映射。把前缀映射改为Ctrl+x,再加入以下几条语句,如今切换窗口就和vim一摸同样了,顿时以为亲切了不少。
#upbind-key k select-pane -U#downbind-key j select-pane -D#leftbind-key h select-pane -L#rightbind-key l select-pane -R
上面的最后一条语句会更改C-x l的功能,我挺喜欢这个功能的,由于咱们很时候都是在两个窗口或这两个面板中切换,因此我又加入以下语句
#select last windowbind-key C-l select-window -l
如今个人l键可不能随便按了,Ctrl+x l是切换面板,Ctrl+x Ctrl+l切换窗口,Ctrl+l清屏。
复制模式copy-mode
前缀 [ 进入复制模式
按 space 开始复制,移动光标选择复制区域
按 Enter 复制并退出copy-mode。
将光标移动到指定位置,按 PREIFX ] 粘贴
若是把tmux比做vim的话,那么咱们大部分时间都是处于编辑模式,咱们复制的时候可不能够像vim同样移动呢?只须要在配置文件(~/.tmux.conf
)中加入以下行便可。
#copy-mode 将快捷键设置为vi 模式setw -g mode-keys vi
C-x s 以菜单的方式查看并选择会话
C-x :new-session 新建一个会话
C-x d 退出并保存会话
终端运行 tmux attach 返回会话
tmux new -s session tmux new -s session -d #在后台创建会话tmux ls #列出会话tmux attach -t session #进入某个会话
从我用vim开始,就相信这世界上有些人比你本身还了解你本身想要什么,因此乔老爷子才能作出让世人尖叫的产品,因此我常常浏览高手的.vimrc 文件,我用了tmux不到3天就发现,它怎么不能最大化当前pane?就像vim里的ZommWinPlugin.vim插件同样,你按下某键,当前窗口 就最大化了,得到最大可视界面。当目前为止,就尚未发现我有需求而别人没有的,一样,已有前人找到的解决办法,方法以下:
# zoom pane <-> window#http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/tmux-zoom.shbind ^z run "tmux-zoom"##
滚屏要进入copy-mode,即前缀+[,而后就能够用上下键来滚动屏幕,配置了vi快捷键模式,就能够像操做vi同样来滚动屏幕,很是的方便。退出直接按‘q’键便可。
能够到个人github仓库中clone,其中有相关的使用说明
https://github.com/SBaof/dot-tmux
同时我也是参考其余人的配置文件