tmux 默認(rèn)的快捷鍵對(duì)我們來(lái)說(shuō)并不友好。許多重要而且有用的功能都使用了一些很難操作的組合鍵或是冗長(zhǎng)的命令字符串。而且 tmux 默認(rèn)的配色方案眼睛看起來(lái)也不舒服。在本章節(jié)中,我們會(huì)為 tmux 構(gòu)建一個(gè)基本的配置文件并在本書(shū)的剩余章節(jié)一直使用。首先我們會(huì)從定制屏幕導(dǎo)航以及創(chuàng)建、調(diào)整面板大小開(kāi)始,然后討論如何處理一些更高級(jí)的設(shè)置。確保你的終端配置正確,這樣我們?cè)O(shè)置的一些 tmux 外觀屬性也能在你的屏幕上正常顯示。完成這些之后,你就會(huì)對(duì) tmux 的可擴(kuò)展性有了更深的理解,然后你可以定制一個(gè)你獨(dú)有的 tmux。下面,我們先從如何配置 tmux 開(kāi)始。
在默認(rèn)情況下,tmux 會(huì)在兩個(gè)位置查找配置文件。首先查找 /etc/tmux.conf
作為系統(tǒng)配置,然后在當(dāng)前用戶(hù)的主目錄下查找 .tmux.conf
文件(~/.tmux.conf 優(yōu)先級(jí)更高,譯者注)。如果這兩個(gè)文件都不存在,tmux 就會(huì)使用默認(rèn)配置。我們并不需要使用系統(tǒng)配置,所以只需要在主目錄下創(chuàng)建一個(gè)新的配置文件即可(即 ~/.tmux.conf
文件)。命令如下:
$ touch ~/.tmux.conf
在這個(gè)文件里可以做任何想讓 tmux 做的事情,比如定義新的快捷鍵,配置一個(gè)包含多個(gè)窗口、面板,運(yùn)行著程序的 tmux 默認(rèn)環(huán)境等。我們先從一些基本的選項(xiàng)做起,令 tmux 使用更簡(jiǎn)單。
CAPS LOCK
鍵,譯者注)在很多鍵盤(pán)上,CAPS LOCK 鍵就在 a 鍵旁邊。如果把這個(gè)鍵映射為 CTRL 鍵,你會(huì)在使用快捷鍵時(shí)更加方便。
在 OS X 系統(tǒng)中,可以在偏好設(shè)置的鍵盤(pán)選項(xiàng)面板里重新映射 CAPS LOCK 鍵。
你只要按下 Modifier Keys 按鈕然后把 CAPS LOCK 鍵的動(dòng)作變?yōu)?Control。
在 Linux 系統(tǒng)中,這個(gè)過(guò)程會(huì)因你的操作系統(tǒng)而變得稍有些復(fù)雜,不過(guò)你可以在 Emacs 的維基百科中找到辦法。
這個(gè)小小的改變?yōu)槟愎?jié)省的時(shí)間遠(yuǎn)超你的想象。
你在之前已經(jīng)知道 tmux 默認(rèn)使用 CTRL-b
鍵作為它的命令前綴鍵。許多使用過(guò) GNU-Screen 的 tmux 用戶(hù)都是使用 CTRL-a
鍵作為命令前綴鍵,使用 CTRL-a
鍵是個(gè)非常不錯(cuò)的選擇因?yàn)樗菀淄瑫r(shí)按下,尤其是如果你把 CAPS LOCK
鍵重新映射為 CTRL
鍵之后,CTRL-a
就更容易按下了。它能讓你的手常位于鍵盤(pán)的主按鍵區(qū)。
在 .tmux.conf
文件里,我們使用 set-option
命令來(lái)設(shè)置選項(xiàng),可以縮寫(xiě)為 set
。下面我們就通過(guò)命令重新定義命令前綴鍵:
set -g prefix C-a
在這個(gè)例子里,我們使用了 -g
選項(xiàng),也就是全局配置(global),它能讓設(shè)置的選項(xiàng)在所有創(chuàng)建的 tmux 會(huì)話里生效。
盡管不是必須的,我們可以通過(guò) unbind-key
命令或 unbind
命令移除之前綁定的組合鍵??梢栽谂渲梦募镙斎胍韵聝?nèi)容來(lái)釋放 CTRL-b
組合鍵:
unbind C-b
tmux 并不會(huì)實(shí)時(shí)地自動(dòng)從配置文件讀取你所做的修改。因此如果你在使用 tmux 的過(guò)程中修改了 .tmux.conf
文件,要想讓所做的配置修改生效的話,你需要關(guān)閉所有的 tmux 會(huì)話,或者在 tmux 命令模式輸入 PREFIX :
命令然后輸入以下內(nèi)容:
source-file ~/.tmux.conf
現(xiàn)在就可以使用 CTRL-a
鍵作為命令前綴鍵了。在剩余章節(jié)中,我們還是會(huì)繼續(xù)把它稱(chēng)為 PREFIX
鍵。
當(dāng)我們向 tmux 發(fā)送命令時(shí),tmux 增加了一個(gè)小小的延時(shí)(也就是在松開(kāi) PREFIX
鍵和按下命令鍵之間的時(shí)間,譯者注),這個(gè)延時(shí)是很有可能妨礙其它程序的運(yùn)行,比如 Vim 編輯器。可以通過(guò)設(shè)置這個(gè)延時(shí)而讓 tmux 響應(yīng)地更快。在配置文件中增加下面的內(nèi)容,將延時(shí)設(shè)置為 1ms:
set -sg escape-time 1
當(dāng)重新載入配置文件后,我們就可以向 tmux 更快地發(fā)送快捷鍵了。
在第一章里,我們討論了窗口以及在一個(gè)會(huì)話里創(chuàng)建多個(gè)窗口時(shí)如何通過(guò)索引切換當(dāng)前的窗口。這個(gè)索引是從 0 開(kāi)始的,感覺(jué)似乎有點(diǎn)惡心(程序員貌似還比較習(xí)慣從 0 開(kāi)始的索引 =。=,譯者注)。通過(guò)在配置文件里添加下面的內(nèi)容可以讓窗口的索引從 1 開(kāi)始:
set -g base-index 1
也就是說(shuō),我們可以使用 PREFIX 1
快捷鍵來(lái)切換到第一個(gè)窗口,而不是 PREFIX 0
。
還可以通過(guò) pane-base-index
選項(xiàng)來(lái)設(shè)置面板的初始索引。我們把下面這行添加到配置文件中,好讓窗口和面板的初始索引保持一致:
setw -g pane-base-index 1
到目前為止,我們已經(jīng)學(xué)會(huì)了使用 set
命令來(lái)配置 tmux 會(huì)話。如果需要配置與窗口進(jìn)行交互的選項(xiàng),需要使用 set-window-option
命令,可以簡(jiǎn)寫(xiě)為 setw
。在本書(shū)中,為了讓配置的例子能夠在一行內(nèi)顯示,因此我使用的都是命令的簡(jiǎn)寫(xiě),你在使用簡(jiǎn)寫(xiě)時(shí)要特別小心,因?yàn)橐徊恍⌒?,你就有可能?set
和 setw
搞混了。
現(xiàn)在我們?cè)賮?lái)創(chuàng)建幾個(gè)更有用的快捷鍵來(lái)加速你的操作。
tmux 里的許多默認(rèn)快捷鍵無(wú)論是在生理上還是在心理上來(lái)說(shuō)都有些過(guò)于延展了。拿 PREFIX %
鍵來(lái)說(shuō),它不光在鍵盤(pán)上不好按,而且如果不看命令參考的話,你幾乎記不住它是用來(lái)做什么的。
在本節(jié)中,我們將會(huì)定義或者重定義一些最常用的 tmux 命令。我們先從自定義一個(gè)重新加載 tmux 配置文件的快捷鍵開(kāi)始。
每次我們對(duì)配置文件做修改之后,要想讓新的配置文件生效,要么關(guān)掉所有的 tmux 會(huì)話然后重新打開(kāi)它,要么就要在 tmux 會(huì)話里發(fā)送一個(gè)命令來(lái)重新加載配置文件?,F(xiàn)在我們來(lái)自定義一個(gè)快捷鍵來(lái)讓它重新加載配置文件。
我們使用 bind
命令來(lái)定義新的快捷鍵。先指定要按下的鍵,后面跟著它要執(zhí)行的命令。
對(duì)于我們的第一個(gè)快捷鍵,我們?cè)O(shè)置為 PREFIX r
,讓它重新加載當(dāng)前 tmux 會(huì)話的 .tmux.conf
配置文件,就像這樣:
bind r source-file ~/.tmux.conf
盡管上面的命令里沒(méi)有 PREFIX
,但是在使用 bind
命令定義快捷鍵之后,還是需要在實(shí)際中先按下 PREFIX
鍵,然后再按下 r
鍵。雖然我們剛才自定義了重新加載配置文件的快捷鍵,但是在新的配置文件被加載前我們還是不能使用它,因此還需要再使用一次 PREFIX :
快捷鍵進(jìn)入命令模式,然后輸入以下命令重新加載配置文件:
source-file ~/.tmux.conf
重新加載配置文件后,tmux 并不會(huì)提示配置是否有所改變,可以使用 display
命令讓 tmux 在狀態(tài)欄輸出一個(gè)消息。我們修改一下剛才定義的快捷鍵,讓它能夠在配置文件加載后顯示一個(gè)消息“Reloaded!”:
bind r source-file ~/.tmux.conf \; display "Reloaded!"
通過(guò)在多個(gè)命令之間添加 \;
符號(hào)可以使一個(gè)鍵可以綁定執(zhí)行多個(gè)命令。
通過(guò)剛才定義的快捷鍵,我們就可以在修改配置文件后按下 PREFIX r
鍵讓新的配置快速生效。
當(dāng)前可以!在 bind 命令后面添加 -n 參數(shù)就可以通知 tmux 這個(gè)快捷鍵不需要按下前綴鍵。例如:
bind-key -n C-r source-file ~/.tmux.conf
通過(guò)上面的配置,你就可以使用 CTRL-r 鍵來(lái)重新加載配置文件了。
但是,這么做會(huì)讓 tmux 會(huì)話里的任何程序或命令都禁用組合鍵,所以使用這種做法時(shí)你要特別小心。
我們?cè)谇懊姘衙钋熬Y鍵重新映射到了 CTRL-a
鍵,但是例如 Vim、Emacs 甚至是 Bash 終端也會(huì)經(jīng)常用到這個(gè)組合鍵。我們需要配置 tmux,把這個(gè)組合鍵發(fā)送給需要的程序中??梢远x一個(gè)快捷鍵來(lái)發(fā)送 send-prefix
命令,就像這樣:
bind C-a send-prefix
在配置生效后,你只需要按兩次 CTRL-a
鍵就可以把 CTRL-a
命令發(fā)送給 tmux 里的程序了。
tmux 里分割面板的默認(rèn)鍵比較難記,所以我們來(lái)重新定義為易記的快捷鍵。我們把水平分割定義為 PREFIX |
鍵,把垂直分割定義為 PREFIX -
鍵:
bind | split-window -h
bind - split-window -v
乍一看,你可能覺(jué)得這兩個(gè)鍵搞反了。split-window
命令的 -v
參數(shù)和 -h
參數(shù)分別代表“垂直(vertical)”分割和“水平(horizontal)”分割,但是對(duì)于 tmux 來(lái)說(shuō),垂直分割表示在當(dāng)前面板之下創(chuàng)建一個(gè)新的面板,所以垂直分割之后的兩個(gè)面板會(huì)上下疊在一起。而水平分割表示在當(dāng)前面板旁邊創(chuàng)建一個(gè)新的面板,因此兩個(gè)面板時(shí)左右并排顯示在屏幕上的。因此,要想垂直地分割窗口,就要使用“水平”分割;要想水平地分割窗口,就要使用“垂直”分割。
使用新的快捷鍵會(huì)讓我們聯(lián)想起來(lái)更加符合視覺(jué)感受。如果想要分割窗口,只需現(xiàn)在腦袋里想象你要把窗口分割成什么樣子然后按下快捷鍵。
使用 PREFIX o
鍵在面板之間移動(dòng)有點(diǎn)讓人討厭,但是要是使用箭頭鍵(上下左右鍵,譯者注)就意味著必須把手從鍵盤(pán)的主操作區(qū)拿開(kāi)。如果你使用過(guò) Vim 編輯器,你可能會(huì)比較熟悉使用 h
,j
,k
和 l
鍵來(lái)回移動(dòng)??梢园?tmux 里的移動(dòng)鍵映射為 Vim 的操作方式。
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
另外,還可以定義 PREFIX CTRL-h
鍵和 PREFIX CTRL-l
鍵在窗口之間循環(huán)切換:
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
如果你已經(jīng)把 CAPS LOCK
鍵重新映射到 CTRL
鍵,你現(xiàn)在就可以在窗口和面板之間來(lái)回切換而不必把手移出鍵盤(pán)的主操作區(qū)。
要調(diào)整面板大小,可以進(jìn)入命令模式然后輸入resize-pane -D
命令讓一個(gè)面板向下調(diào)整一行的距離。我們可以通過(guò)在調(diào)整方向的后面添加一個(gè)數(shù)字來(lái)指定要調(diào)整的大小,比如 resize-pane -D 5
。但是這個(gè)命令有些啰嗦,我們來(lái)定義幾個(gè)快捷鍵使得調(diào)整面板大小更方便些。
我們?cè)谥笆褂昧?Vim 的移動(dòng)鍵來(lái)調(diào)整窗口大小?,F(xiàn)在我們來(lái)使用 PREFIX H
,PREFIX J
,PREFIX K
和 PREFIX L
鍵調(diào)整面板的尺寸:
bind H resize-pane -L 5
bind J resize-pane -D 5
bind K resize-pane -U 5
bind L resize-pane -R 5
注意,上面的配置使用的是大寫(xiě)字母。tmux 是對(duì)大小寫(xiě)敏感的,大寫(xiě)字母和小寫(xiě)字母分別表示不同的快捷鍵。你需要使用 SHIFT
鍵來(lái)觸發(fā)大寫(xiě)字母的快捷鍵。
使用這樣的移動(dòng)鍵會(huì)幫助我們始終跟隨窗口移動(dòng)的方向。比如,如果有一個(gè)分割為兩個(gè)水平面板的窗口,就像這樣:
-------------------
| |
| Pane 1 |
| |
-------------------
| |
| Pane 2 |
| |
-------------------
如果想要增加 Pane 1 的大小,那么就可以把光標(biāo)移動(dòng)到 Pane 1 里然后按下 PREFIX J
鍵,那么水平分割線就會(huì)向下移動(dòng)。如果按下 PREFIX K
,就會(huì)讓水平分割線向上移動(dòng)。
我們通過(guò)逐漸增加的方式來(lái)調(diào)整面板大小,也就是說(shuō)每次想要調(diào)整面板大小的時(shí)候,就需要先按下前綴鍵。但是如果使用了 -r
參數(shù),那么就可以讓這個(gè)快捷鍵變?yōu)椤翱芍貜?fù)的(repeatable)”,這意味著只需要按下前綴鍵一次,然后就可以在最大重復(fù)限制范圍內(nèi)持續(xù)地按下定義的命令鍵。修改后的配置如下:
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
默認(rèn)的最大重復(fù)限制為 500 毫秒,可以通過(guò)設(shè)置 repeat-time
選項(xiàng)把這個(gè)時(shí)間改為更大的數(shù)值。
現(xiàn)在我們把注意力轉(zhuǎn)移到 tmux 如何與鼠標(biāo)配合使用。
雖然 tmux 的設(shè)計(jì)目標(biāo)是純鍵盤(pán)操作,但是你會(huì)發(fā)現(xiàn)有時(shí)候使用鼠標(biāo)更加方便。如果你的終端配置支持使用鼠標(biāo)的向前單擊和滾動(dòng)切換程序,那么你就可以告訴 tmux 如何處理這些鼠標(biāo)事件。
有時(shí)你可能需要使用鼠標(biāo)滾輪在終端的緩沖區(qū)里向上滾屏,或者你剛開(kāi)始使用 tmux 時(shí)想用鼠標(biāo)選擇窗口和面板。要想在 tmux 里使用鼠標(biāo),需要打開(kāi)鼠標(biāo)模式:
setw -g mode-mouse on
還可以配置 tmux,讓它能夠使用鼠標(biāo)選擇一個(gè)面板、調(diào)整面板大小或者讓我們?cè)诖翱诹斜砝镞x擇一個(gè)窗口。我們需要配置與剛才類(lèi)似的配置,就像這樣:
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on
把這些配置添加到配置文件里非常方便,但是你要記住,在 tmux 里使用鼠標(biāo)會(huì)讓你的操作速度變慢。盡管使用滾屏和單擊功能似乎是個(gè)好主意,但是你還是應(yīng)該學(xué)會(huì)通過(guò)相應(yīng)的鍵盤(pán)操作切換面板或是在緩沖區(qū)里向前或向后移動(dòng)。所以,在我們的配置文件里會(huì)把鼠標(biāo)選項(xiàng)禁用??梢韵襁@樣明確地指明:
setw -g mode-mouse off
set -g mouse-select-pane off
set -g mouse-resize-pane off
set -g mouse-select-window off
或是簡(jiǎn)單地禁用全部鼠標(biāo)選項(xiàng):
setw -g mode-mouse off
這樣設(shè)置可以防止不小心使用鼠標(biāo)選中了終端窗口而導(dǎo)致的誤操作,而且它會(huì)使我們更加專(zhuān)注于鍵盤(pán)操作。
tmux 提供的高擴(kuò)展性配置系統(tǒng)可以高度自定義我們與界面交互的方式,還可以配置它的外觀,讓它看起來(lái)更舒適一些,而且在一些情境中,它還能展示給我們更多的信息。
tmux 提供了相當(dāng)多的方法來(lái)定制外觀。在本節(jié)中,我們會(huì)討論如何配置這些選項(xiàng),包括配置狀態(tài)欄和其它面板。我們先配置不同的顏色,然后把乏味的狀態(tài)欄變成能展示重要信息的工具。
為了讓 tmux 具有最佳的視覺(jué)體驗(yàn),首先要確保終端和 tmux 都運(yùn)行在 256 色模式里。我們先來(lái)配置終端。
可以使用一個(gè)簡(jiǎn)單的 Perl 腳本來(lái)測(cè)試終端的色彩模式。命令如下:
$ wget http://www.vim.org/scripts/download_script.php?src_id=4568 -O colortest
$ perl colortest -w
如果你的配置正確的話,你應(yīng)該看到終端類(lèi)似于圖5(終端正確顯示 256 色)所示。
圖5 - 終端正確顯示 256 色
如果你使用的是 Linux 系統(tǒng),你可能需要把下面內(nèi)容添加到你的 ~/.bashrc
文件里才能運(yùn)行一個(gè) 256 色的終端:
[ -z "$TMUX" ] && export TERM=xterm-256color
這個(gè)條件語(yǔ)句會(huì)確保 TERM
變量只在 tmux 外運(yùn)行,因?yàn)?tmux 會(huì)自己設(shè)置它所在的終端。
如果你使用的是 Mac ,你應(yīng)該知道在雪豹系統(tǒng)里終端只會(huì)顯示 16 色。你需要另外安裝一個(gè)終端,比如 iTerm2 才能得到全色彩支持。
如果無(wú)法看見(jiàn)顏色的正確編號(hào),你需要配置你的終端使用 xterm 的 256 色模式。在 iTerm2 終端里,你可以編輯默認(rèn)的配置文件找到這個(gè)選項(xiàng),然后把終端模式設(shè)置為 xterm-256color,就如圖6(為 tmux 配置 iTerm2)所示:
圖6 - 為 tmux 配置 iTerm2
另外,你還要保證你的終端模擬器支持顯示 UTF-8 字符,只有這樣才能讓譬如面板分割線的可視元素顯示為虛線。
為了讓 tmux 以 256 色模式顯示內(nèi)容,需要把下面內(nèi)容添加到我們的 .tmux.conf
文件里:
set -g default-terminal "screen-256color"
當(dāng)色彩配置正確配置后,你會(huì)發(fā)現(xiàn)在 tmux 里運(yùn)行例如 Vim 之類(lèi)的程序更加方便了,尤其是如果語(yǔ)法高亮使用了更加豐富的配色方案。你可以在圖7(Vim 里 16 色和 256 色對(duì)比)里看出差別來(lái)?,F(xiàn)在就可以來(lái)配置 tmux 組件的外觀了,我們先從配色開(kāi)始。
圖7 - Vim 里 16 色和 256 色對(duì)比
我們可以改變 tmux 交互界面的多個(gè)部分的顏色,包括狀態(tài)欄,窗口列表,命令區(qū)域甚至是面板分割線。
tmux 提供了特定顏色的變量,包括 black
(黑,譯者注),red
(紅,譯者注),green
(綠,譯者注),yellow
(黃,譯者注),blue
(藍(lán),譯者注),magenta
(品紅,譯者注),cyan
(藍(lán)綠,譯者注),或 white
(白,譯者注)。我們可以使用在 256 色調(diào)色板中的 colour0
到 colour255
。如果你再看看 colortest
程序的輸出結(jié)果,你會(huì)看到這些顏色的編號(hào)。你還可以運(yùn)行這個(gè)簡(jiǎn)單的 shell 腳本來(lái)選擇你需要的顏色:
for i in {0..255} ; do
printf "\x1b[38;5;${i}mcolour${i}\n"
done
tmux 有特定的配置選項(xiàng)可以更改每個(gè)組件的前景色和背景色。我們先從定制狀態(tài)欄的顏色開(kāi)始探索。
狀態(tài)欄的默認(rèn)配色是在亮綠色的背景上顯示黑色字體。這看起來(lái)有些太乏味了。我們讓它變成默認(rèn)為黑色背景上顯示白色的字體。
使用 status-bg
和 status-fg
選項(xiàng)來(lái)設(shè)置狀態(tài)欄的背景色和前景色,可以像這樣配置:
set -g status-fg white
set -g status-bg black
在后面我們會(huì)定制狀態(tài)欄內(nèi)條目(items)的顏色。現(xiàn)在先來(lái)配置窗口列表的顏色。
我們想讓當(dāng)前活動(dòng)的窗口顯示的更加明顯可以設(shè)置當(dāng)前活動(dòng)窗口的顏色為紅色,不活動(dòng)窗口的顏色為藍(lán)綠色。使用 set-window-option
選項(xiàng)來(lái)配置普通窗口(regular window)的樣式,就像這樣:
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim
可以使用 default
作為一個(gè)默認(rèn)值那么這個(gè)值就會(huì)繼承狀態(tài)欄的顏色。
要配置活動(dòng)窗口(active window)的樣式,可以使用相似的配置:
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
這樣就定制了窗口列表的顏色,還可以定制面板分隔符(pane dividers)的顏色。
可以指定面板分隔符的顏色,更棒的是,還可以通過(guò)定義顏色讓當(dāng)前活動(dòng)面板變得更顯眼,就像圖8(活動(dòng)面板)所示。
圖8 - 活動(dòng)面板
面板也有前景色和背景色之分,所以我們?cè)O(shè)置相應(yīng)的變量:
set -g pane-border-fg color
set -g pane-border-bg color
set -g pane-active-border-fg color
set -g pane-active-border-bg color
一個(gè)面板的前景色就是組成邊界的虛線顏色。默認(rèn)的背景色是黑色,如果讓它標(biāo)記出當(dāng)前活動(dòng)面板,就可以讓活動(dòng)面板顯得相當(dāng)突出:
set -g pane-border-fg green
set -g pane-border-bg black
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow
在修改狀態(tài)欄前,我們先來(lái)潤(rùn)色一下 tmux 命令行。
在 tmux 的命令模式輸入 tmux 命令也能看到警告信息,當(dāng)然也可以定制它的配色。配置方法幾乎和配置狀態(tài)欄相同。
我們把背景色改為黑色,文字顏色設(shè)置為白色。當(dāng)有消息提示時(shí)設(shè)置它的顏色為亮白色。配置如下:
set -g message-fg white
set -g message-bg black
set -g message-attr bright
就是這么簡(jiǎn)單?,F(xiàn)在我們來(lái)為窗口列表兩邊的狀態(tài)欄區(qū)域配色。
tmux 的狀態(tài)欄能顯示非常多的信息??梢酝ㄟ^(guò)執(zhí)行 shell 命令使用預(yù)定義的組件(components)或者創(chuàng)建我們自己的組件。
默認(rèn)的狀態(tài)欄顯示的信息,看起來(lái)像是這樣:
[development] 0:bash* "example.local" 00:44 02-Nov-1
在左側(cè),先看到 tmux 會(huì)話的名稱(chēng),然后后面跟著窗口列表。窗口列表先是顯示當(dāng)前窗口的索引值,然后跟著窗口的名稱(chēng)。在右側(cè),可以看到服務(wù)器的主機(jī)名(或者是本機(jī)的主機(jī)名,譯者注),后面跟著日期和時(shí)間。下面我們來(lái)自定義狀態(tài)欄的的內(nèi)容。
狀態(tài)欄包含 3 個(gè)組件:一個(gè)左面板,窗口列表和一個(gè)右面板。我們可以改變狀態(tài)欄里左側(cè)或右側(cè)面板的內(nèi)容,這需要使用一個(gè)文本和變量的組合。表1(狀態(tài)欄變量)列出了狀態(tài)欄里可能用到的變量。
表1 - 狀態(tài)欄變量
變量 | 描述 |
---|---|
#H |
本地主機(jī)的主機(jī)名 |
#h |
本地主機(jī)的主機(jī)名,沒(méi)有 domain |
#F |
當(dāng)前窗口的標(biāo)簽 |
#I |
當(dāng)前窗口的索引 |
#P |
當(dāng)前面板的索引 |
#S |
當(dāng)前會(huì)話的名稱(chēng) |
#T |
當(dāng)前窗口的標(biāo)題 |
#W |
當(dāng)前窗口的名稱(chēng) |
## |
一個(gè) # 符號(hào) |
#(shell-command) |
shell 命令的第一行輸出 |
#[attributes] |
要改變的顏色或?qū)傩?/td> |
例如,如果想要在左側(cè)顯示當(dāng)前 tmux 會(huì)話的名稱(chēng),就需要使用 set-option -g status-left
選項(xiàng),后面跟著 #S
值,就像這樣:
set -g status-left "#S"
還可以通過(guò)設(shè)置前景色讓它顯示地更明顯,像這樣:
set -g status-left "#[fg=green]#S"
可以向狀態(tài)欄里添加任何想要的屬性和條目。為了便于展示,我們修改了左側(cè)的狀態(tài)欄,讓它顯示綠色的會(huì)話名稱(chēng),黃色的窗口編號(hào),以及藍(lán)綠色的當(dāng)前面板。配置如下:
set -g status-left "#[fg=green]#S #[fg=yellow]#I #[fg=cyan]#P"
也可以向狀態(tài)欄里添加任意文字。我們現(xiàn)在添加一些文字,讓會(huì)話、窗口和面板顯示地更突出,像這樣:
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
我們?cè)O(shè)置了 status-left-length
選項(xiàng)因?yàn)橹付ǖ妮敵鰧?duì)默認(rèn)長(zhǎng)度來(lái)說(shuō)太長(zhǎng)了,所以我們讓那個(gè)區(qū)域更寬一些。
還可以配置右側(cè)的狀態(tài)欄?,F(xiàn)在我們向它添加當(dāng)前日期和時(shí)間:
set -g status-right "#[fg=cyan]%d %b %R"
這樣配置的日期格式是“13-Jan 13:45”,你可以讓它顯示任意你想要的格式,可以使用許多編程語(yǔ)言通用的 strftime()
時(shí)間格式化機(jī)制。
在狀態(tài)欄里開(kāi)啟 UTF-8 支持是個(gè)不錯(cuò)的注意,尤其是如果你特別喜歡使用這些字符。
set -g status-utf8 on
還可以更進(jìn)一步,通過(guò)使用 #(shell-command)
變量把 shell 命令加入到狀態(tài)欄中,在狀態(tài)欄顯示該命令的返回結(jié)果。在后續(xù)章節(jié)會(huì)詳細(xì)介紹這個(gè)功能。
我們已經(jīng)把當(dāng)前時(shí)間和一些其它動(dòng)態(tài)信息添加到了狀態(tài)欄,這時(shí)需要告訴 tmux 這些信息的刷新周期。默認(rèn)配置下,tmux 會(huì)每 15 秒刷新一次狀態(tài)欄。可以通過(guò)使用 set-option -g status-interval
命令后面加上刷新周期(以秒為單位,譯者注)來(lái)指定 tmux 的刷新時(shí)間,就像這樣:
set -g status-interval 60
這樣就會(huì)讓 tmux 每 60 秒刷新一次狀態(tài)欄。注意,如果你在狀態(tài)欄里添加了 shell 命令,這些命令也會(huì)在每次狀態(tài)欄刷新時(shí)執(zhí)行一遍,所以要注意不要加載太多資源密集型的腳本。
我們還能控制窗口列表顯示的位置。默認(rèn)的,窗口列表是靠左對(duì)齊的,通過(guò)簡(jiǎn)單的配置就可以讓窗口列表在左右面板之間居中顯示:
set -g status-justify centre
這樣配置就會(huì)讓窗口列表居中顯示。創(chuàng)建新窗口時(shí),窗口列表會(huì)相應(yīng)地變換位置,讓整個(gè)窗口列表顯示在狀態(tài)欄正中間。
同樣的,我們希望如果當(dāng)前會(huì)話的其他窗口里有一些事件發(fā)生時(shí)我們能夠注意到這些事件,那么我們就可以快速響應(yīng)那個(gè)窗口。可以通過(guò)增加一個(gè)可視化的通知(visual notification)實(shí)現(xiàn)這個(gè)功能,像這樣:
setw -g monitor-activity on
set -g visual-activity on
現(xiàn)在呢,如果其它窗口里有一些活動(dòng),它就會(huì)使用藍(lán)綠色的背景色突出顯示,就像這里的 webserver 窗口:
更多建議: