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!