2014年7月22日 星期二

tmux 設定初上手

接續上一篇「tmux 操作初上手」,本篇就來談談 tmux 的設定。


tmux 基本設定


在 tmux 之中幾乎所有的操作都是由 tmux 所定義好的指令集來達成的,包括畫面切割、多重同步輸入以及畫面顯示調整等,在 tmux 之中都可以用特定的指令去完成,也可以將各式各樣的按鍵組合綁定(bind)到不同的指令上,讓平時可以更方便使用。

tmux 幾乎所有的設定都可以藉由命令列輸入指令進行修改,若想要每次開啟 tmux 時都可以有設定好的環境則需要透過建立與設定 $HOME/.tmux.conf 設定檔,或是設定系統全域通用的設定檔 /etc/tmux.conf

設定檔中的指令,會在 tmux server 啟動的時候被讀取並執行。

我們首先介紹三個實用的設定指令:
  • set-option
  • set-window-option
  • bind-key


* set-option


透過 set-option 可以修改狀態列的設定,加上參數 -g 則可以讓修改的設定作用在全體環境之中,不需要在切換 Window 之後還需要再修改相同的設定。

狀態列示意圖如下:
tmux 狀態列示意圖


* set-window-option


透過 set-window-option 則是可以針對各 Window 在狀態列上所需要顯示的訊息做修改。


* bind-key


bind-key 則是可以自定義快捷鍵,將特定的按鍵組合綁定到所指定的指令之上,在按下快捷鍵的同時就等於在命令列上打上同等的指令。

例如:
bind-key c new-window
上述表示按下 <prefix-key> + c (tmux 預設的 <prefix-key>Ctrl + b) 就等同於執行了 tmux new-window 的指令。

tmux 預設的 <prefix-key>Ctrl + b, 筆者通常都會使用以下設定將 Ctrl + b 改為 Ctrl + a
set-option -g prefix C-a
這麼做是因為一來以前使用 Screen 習慣了使用 Ctrl + a 作為 <prefix-key> ,另一方面也是 Ctrl + b 真的鍵盤上的距離太遠,十分不方便。

了解 tmux 各式指令的作用後,就可以創造出相當多元的操作,像是預先定義好在開新視窗時便做好畫面分隔並且執行特定的指令等等的行為(例如製作 tmux dashboard),對於系統管理者而言,在檢視系統效能或者是記錄檔的時候都是相當有用的幫手。


tmux 畫面設定


tmux 顯示畫面如下圖所示可以粗略分為在底下的狀態列(Status line)以及 Window,在每一個 Window 之中至少都會存在一個 Pane 作為終端機的顯示介面,若是 Window 中不存在任何 Pane 的話該 Window 則會自動被關閉。而 Status line 之中則包括了 Status-left, Status-right 以及 Window list 三個部分。

tmux 狀態列示意圖


在 tmux version 1.8 之前, 狀態列的設定被分為許多部分,包含了 status-(right|left)-attr, status-(right|left)-bg, status-(right|left)-fg,而這些繁雜的設定在 tmux version 1.9a 這些設定都被整合為一個 status-(right|left)-style,相較於以前採用每個選項各自設定的方式,現在採用的設定方式則較為淺顯易懂,降低了設定四散各地可能帶來的問題,例如:重複設定。以下筆者將簡單介紹 Status line 的相關設定,以及設定中會使用到的常見格式字串代表意義。

tmux 中的 Status line 是具有繼承關係的,譬如說 Status line 中所設定的 style 是會被 status-leftStatus-right 所繼承當做預設值,若是希望彼此間採用不同的 style 設定可以採用分開設定的方式,或者是僅覆蓋一部分的設定。

以筆者所使用的設定來說,則是在 Status-style 設定了基礎的底色以及預設的前景顏色,然後在 Status-left 以及 Status-right 中透過格式化字串個別設定不同區塊所使用的顏色,設定如下所示:
# status-line
set-option -g status-style bg=colour235,fg=colour75
set-option -g status-justify centre
set-option -g status-position bottom
 
# status-left
set-option -g status-left-style fg=colour147,bg=default
set-option -g status-left "[ #[fg=colour161]#{=10:session_name}#[fg=default]:#2I:#2P ]"
set-option -g status-left-length 20

# status-right-line
set-option -g status-right-style fg=colour13,bright
set-option -g status-right "[ #[fg=colour46]#{=19:pane_title}#[fg=default] %Y-%m-%d %H:%M ]"
set-option -g status-right-length 40

其中 style 設定語句中可以設定前景(fg)、後景(bg),以及 Status line 相關屬性設定,其中相關屬性設定包含了 bright (or bold), dim, underscore, blink, reverse, hiddenitalics 等設定。

Status-left 之後所跟隨的格式化字串可以讓使用者自行設定希望在 Status line 中顯示的訊息(例如顯示時間)。關於格式化字串可以參閱 tmux manual 中的 Status-left 區塊的說明,或者是 FORMATS 區塊的完整說明,包含內建可用的顯示資訊、縮寫名稱以及限制顯示字串長度。

以上是一些關於 Status line 的基本設定方法,在此也附上筆者所維護的 tmux 設定檔的 Github 連結,相關的設定可以到那邊參考,如果有任何議題除了在網誌下方留言外,也歡迎發送 Github issue 給筆者。

以下是該設定檔的幾個簡單快捷鍵對照:

  • Ctrl a + c 開啟新 Window
  • Ctrl a + n 移至下一個 Window
  • Ctrl a + "  水平切割 Window
  • Ctrl a + | 垂直切割 Window
  • Ctrl a + o 移至下一個 Pane
  • Ctrl a + tab 移至最後使用的 Pane



此次筆者分享的 tmux 大約至此告一段落,還有許多 tmux 強大的功能尚未介紹,筆者將會在之後文章中繼續介紹並分享給大家,包含深入了解 tmux 指令組合還有 tmux powerline 等議題。


參考資料:

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1

沒有留言: