tmux是一个优秀的终端复用软件,即便非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络很差的状况下仍然能保证工做现场不丢失!此外,tmux彻底使用键盘控制窗口,实现窗口的切换功能。git
简单地说,tmux对于我主要有两个功能(这应该也是tmux的主要功能):github
sudo apt-get install tmux
安装完成后输入命令tmux便可打开软件,界面十分简单,相似一个下方带有状态栏的终端控制台;不出意外,这时候你会跟我第一次同样,以为tmux没什么牛逼的。vim
根据tmux的定义,在开启了tmux服务器后,会首先建立一个会话,而这个会话则会首先建立一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称做tmux的一个面板,虽然其使用方法与终端控制台彻底相同。安全
tmux使用C/S模型构建,主要包括如下单元模块:ruby
咱们先来看一张效果图,再来学习tmux的配置和使用我通常都是这么用,由于个人笔记本只有13寸:-)服务器
经常使用按键 这里须要说明一点的是,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 ALT-方向键 调整分隔窗口大小 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 + a set -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一摸同样了,顿时以为亲切了不少。 #up bind-key k select-pane -U #down bind-key j select-pane -D #left bind-key h select-pane -L #right bind-key l select-pane -R 上面的最后一条语句会更改C-x l的功能,我挺喜欢这个功能的,由于咱们很时候都是在两个窗口或这两个面板中切换,因此我又加入以下语句 #select last window bind-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 #进入某个会话 使当前pane 最大化 从我用vim开始,就相信这世界上有些人比你本身还了解你本身想要什么,因此乔老爷子才能作出让世人尖叫的产品,因此我常常浏览高手的.vimrc文件,我用了tmux不到3天就发现,它怎么不能最大化当前pane?就像vim里的ZommWinPlugin.vim插件同样,你按下某键,当前窗口就最大化了,得到最大可视界面。当目前为止,就尚未发现我有需求而别人没有的,一样,已有前人找到的解决办法,方法以下: # zoom pane <-> window #http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/tmux-zoom.sh bind ^z run "tmux-zoom" ## 滚屏 滚屏要进入copy-mode,即前缀+[,而后就能够用上下键来滚动屏幕,配置了vi快捷键模式,就能够像操做vi同样来滚动屏幕,很是的方便。退出直接按‘q’键便可。 其余配置 下面是从别人那里摘录过来的配置,反正我是用不着,留着之后参考吧,或许屏幕前的你有须要呢。 # # author : Xu Xiaodong <xxdlhy@gmail.com> # modified : 2012 Jul 22 # #-- base settings --# set -g default-terminal "screen-256color" set -g display-time 3000 set -g escape-time 0 set -g history-limit 65535 set -g base-index 1 set -g pane-base-index 1 #-- bindkeys --# # prefix key (Ctrl+a) set -g prefix ^a unbind ^b bind a send-prefix # split window unbind '"' # vertical split (prefix -) bind - splitw -v unbind % bind | splitw -h # horizontal split (prefix |) # select pane bind k selectp -U # above (prefix k) bind j selectp -D # below (prefix j) bind h selectp -L # left (prefix h) bind l selectp -R # right (prefix l) # resize pane bind -r ^k resizep -U 10 # upward (prefix Ctrl+k) bind -r ^j resizep -D 10 # downward (prefix Ctrl+j) bind -r ^h resizep -L 10 # to the left (prefix Ctrl+h) bind -r ^l resizep -R 10 # to the right (prefix Ctrl+l) # swap pane # swap with the previous pane (prefix Ctrl+u) bind ^u swapp -U # swap with the next pane (prefix Ctrl+d) bind ^d swapp -D # misc # select the last pane (prefix e) bind e lastp # select the last window (prefix Ctrl+e) bind ^e last # kill pane (prefix q) bind q killp # kill window (prefix Ctrl+q) bind ^q killw # copy mode # enter copy mode (prefix Escape) bind Escape copy-mode # paste buffer (prefix Ctrl+p) bind ^p pasteb # select (v) bind -t vi-copy v begin-selection # copy (y) bind -t vi-copy y copy-selection # zoom pane <-> window #http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/tmux-zoom.sh bind ^z run "tmux-zoom" # app # htop (prefix !) bind ! splitw htop # man (prefix m) bind m command-prompt "splitw 'exec man %%'" # perl func (prefix @) bind @ command-prompt "splitw 'exec perldoc -t -f %%'" # perl var (prefix *) bind * command-prompt "splitw 'exec perldoc -t -v %%'" # perl doc (prefix %) bind % command-prompt "splitw 'exec perldoc -t %%'" # ruby doc (prefix /) bind / command-prompt "splitw 'exec ri %%'" # reload config (prefix r) bind r source ~/.tmux.conf \; display "Configuration reloaded!" #-- statusbar --# set -g status-utf8 on set -g status-interval 1 set -g status-keys vi setw -g mode-keys vi setw -g automatic-rename off #-- colorscheme --# #https://github.com/daethorian/conf-tmux/blob/master/colors/zenburn.conf # modes setw -g clock-mode-colour colour223 setw -g mode-attr bold setw -g mode-fg colour223 setw -g mode-bg colour235 # panes set -g pane-border-bg colour234 set -g pane-border-fg colour234 set -g pane-active-border-bg colour232 set -g pane-active-border-fg colour232 # statusbar set -g status-justify centre set -g status-bg colour235 set -g status-fg colour248 set -g status-attr dim #[default]» #[fg=colour187]#S #[default]• #[fg=colour187]w#I.p#P#[default]" set -g status-left " set -g status-left-attr bright set -g status-left-length 20 #[fg=colour174]#(/home/xiaodong/bin/uptime) #[default]• #[fg=colour174]#(cut -d ' ' -f 1-3 /proc/loadavg)" set -g status-right " set -g status-right-attr bright set -g status-right-length 80 setw -g window-status-current-fg colour223 setw -g window-status-current-bg colour237 setw -g window-status-current-attr bold setw -g window-status-current-format "#I:#W#F" #setw -g window-status-alert-attr bold #setw -g window-status-alert-fg colour255 #setw -g window-status-alert-bg colour160 # messages set -g message-attr bold set -g message-fg colour223 set -g message-bg colour235 set -g visual-activity on 快速启动tmux 若是以为每次都要打开tmux,而后在打开几个窗口和面板很麻烦,那么下面这个脚本你必定会喜欢。参考这里 #!/bin/sh # # name : tmuxen, tmux environment made easy # author : Xu Xiaodong xxdlhy@gmail.com # license : GPL # created : 2012 Jul 01 # modified : 2012 Jul 02 # cmd=$(which tmux) # tmux path session=codefun # session name if [ -z $cmd ]; then echo "You need to install tmux." exit 1 fi $cmd has -t $session if [ $? != 0 ]; then $cmd new -d -n vim -s $session "vim" $cmd splitw -v -p 20 -t $session "pry" $cmd neww -n mutt -t $session "mutt" $cmd neww -n irssi -t $session "irssi" $cmd neww -n cmus -t $session "cmus" $cmd neww -n zsh -t $session "zsh" $cmd splitw -h -p 50 -t $session "zsh" $cmd selectw -t $session:5 fi $cmd att -t $session exit 0 若是还有其余须要,能够去这里看看,固然了,最全的参考文档,就是man tmux。happy tmux!