tmux 與 screen 都是 Multiple terminal 的工具之一,平常我都是用 Putty connection manager 一次開兩個 tab ,分成左、右兩邊,再加上 screen 來開發,這個方式必須同時開兩個 ssh client,另外 connection manager 這個軟體在切換 tab 時又有 Bug , 常常會卡住,所以研究一下 tmux ,來試試看好不好用。
在安裝 tmux 之前,要先裝一個必備的軟體 libevent。
編譯與安裝 libevent
- wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
- tar -zxvf libevent-2.0.21-stable.tar.gz
- cd libevent-2.0.21-stable
- ./configure --prefix=/usr/local/ LDFLAGS="-L/usr/local/lib"
- gmake
- sudo gmake install
- sudo ldconfig
裝好之後可以在 /usr/local/lib/libevent-2.0.so.5 這裡找到 libevent 的 binary library。
編譯與安裝 tmux
- git clone https://github.com/tmux/tmux.git
- cd tmux
- ./configure --prefix=/usr/local/
- gmake
- sudo gmake install
裝好之後可以在 /usr/local/bin/tmux 這裡找到 tmux 的執行檔
如果一切沒問題,在 terminal 裡輸入 tmux 後,就可以進入 tmux 囉。
如何使用 tmux
tmux 的介面分成 window(視窗) 與 pane(窗格) 兩種,弄過這兩個功能,可以把畫面切割成很多區塊,例如我建立了二個 window 和 三個 pane,這樣的組合,就可以出現 6 個操作畫面,這樣可以一個用來編輯,一個用來跑 unit-test,一個用來看 log ...
第一次使用,什麼都不懂,當然就是用 「man tmux」 這個指令,來看看 tmux 有什麼功能,接著就一行一行來看 tmux 的說明。
- tmux -2 : 啟用 256 色。
- tmxu -8 : 啟用 88 色 , 一般來說使用 256 會比較好一點。
- tmux -c [shell command]:
- tmux -f [file]: 讀取 config 設定檔。
- tmux -L [socket-name] : 指定一個 tmux 名稱
- 進入上次的 tmux, attach : tmux attach
- 列出目前的 tmux session 有那些 : tmux ls
tmux 的指令使用方式,必須要先按一下 tmux 的 prefix key,然後再接著輸入 tmux 的指令,預設的 prefix key 為 [Ctrl+b],所以要先按鍵盤的 [ctrl]+[b],再按一下 tmux 的指令熱鍵。
相關的熱鍵如下
- 建立一個新的視窗 : 先按[Ctrl+b] ,再按一下 [c] ,這樣就會自已開啟一個視窗(window),而每一個視窗都會有一個編號,從 0 開始算, [0,1,2,3,4,5,...]。
- 跳到新開的視窗 : [Ctrl+b] , [編號] ,一樣是先按一下 prefix key ,再按一下視窗的鍽號,就可以跳到剛剛打開的視窗了。
- 跳出 tmux , detach : [Ctrl+b] ,[d]
- [Ctrl+b] ,[n] : 跳到下一個 window
- [Ctrl+b] ,[p] : 跳到上一個 window
tmux conf 設定檔
tmux 的設定檔可以依每個帳號有所不同,設定檔路徑為 ~/.tmux.conf 。
- set -g mode-mouse on
- set -g mouse-resize-pane on :使用滑鼠來調整 Pane 的尺寸,啟用這個功能後。
- set -g pane-active-border-fg red : 修改 active Pane 的框為紅色。
- set -g pane-border-fg black : 修改 Pane 的框為黑色。
- set-window-option -g window-status-current-fg blue : 修改 active window 的字體顏觸為監色。
熱鍵設定
tmux 的熱鍵設定方式有 , bind , bind-key -n , bind-key -r 。
bind-key -n的意思是說,可以不須要先執行 prefix key [Ctrl+b], 例如我加入一個熱鍵 bind-key -n C-k kill-pane,這樣我只要按 [Ctrl+k]就能直接刪除一個 Pane ,不用事先按 [Ctrl+b]。
bind-key -r的意思是說,這個熱鍵是可以 repeat的,只要一直按著,就能重覆執行。
- 更改 prefix key ,將 [Ctrl+b] 改成 [Ctrl+a] :
- unbind C-b
- set -g prefix C-a
- 設定 [Ctrl+b],[s] 建立水平分割視窗 : bind s split-window -v
- 設定 [Ctrl+b],[v] 建立垂直分割視窗 : bind v split-window -h
- 設定 [Ctrl+x] 刪除一個 Pane : bind-key -n C-k kill-pane
- 設定 [Alt+鍵盤上方鍵(^)] 移到上面的 Pane : unbind-key M-up ; bind-key -n M-up select-pane -U
- 設定 [Alt+鍵盤下方鍵] 移到下面的 Pane : unbind-key M-down ; bind-key -n M-down select-pane -D
- 設定 [Alt+鍵盤左鍵(<-)] 移到左邊的 Pane : unbind-key M-Left ; bind-key -n M-left select-pane -L
- 設定 [Alt+鍵盤右鍵(->)] 移到右邊的 Pane : unbind-key M-right ; bind-key -n M-right select-pane -R
- setw -g mode-keys vi
- set -g default-terminal "xterm-256color"
- set-window-option -g xterm-keys on
- bind s split-window -v
- bind v split-window -h
- bind-key -n C-k kill-pane
- unbind-key M-up ; bind-key -n M-up select-pane -U
- unbind-key M-down ; bind-key -n M-down select-pane -D
- unbind-key M-Left ; bind-key -n M-left select-pane -L
- unbind-key M-right ; bind-key -n M-right select-pane -R
- set -g pane-active-border-fg red
- set -g pane-border-fg black
- set -g status-justify left
- set -g status-interval 120 # 120 sec refresh status
- set -g display-time 3000
- set -g status-bg black
- set -g status-fg white
- set-window-option -g window-status-current-fg blue
- set-window-option -g window-status-current-bg yellow
- set-window-option -g window-status-current-attr default