今天繼續介紹我的終端環境,tmux。
why tmux?
用一個工具的第一問自然還是為什麼要用。其實當時使用tmux的原因很簡單。工作中經常需要長時間的編譯。總想要下班後要關機的情況下,(肯定有人問我為什麼關機,我覺得環保:)而且很多時候是筆記本工作,下班還帶回去。),讓遠超伺服器繼續進行編譯。簡單的尋覓一番之後,就發現了tmux。而且遠超預期,就一直用了下來。
其他讓我非常喜歡的功能有:
- window,pane的概念可以很好地進行多視窗切換,視窗分割。
- 狀态行配置很容易。
- vi 模式
- 複制粘貼緩沖區
- 腳本化.通過腳本可以自動化視窗布局。
tmux簡單介紹
簡單來說,tmux是一個
multiplexers
,他可以讓你同時運作多個終端,在多個終端之間切換。你可以斷開終端的同時讓終端内容繼續運作(例如之前我提到的編譯任務),類似的還有
screen
。
tmux是典型的c/s架構。有如下幾個概念。
- session. session是一個特定的終端組合。輸入tmux就可以打開一個新的session。
- window。window 為session中的終端。
- pane 。pane為一個window分隔出來的各個間隔,即window中的終端。
tmux的使用
正如上所述,在終端中輸入
tmux
就可以打開一個tmux session。如圖:
底部會出現狀态欄。左邊表示目前為session 0, window 1, pane 1,中間會顯示目前視窗編号和路徑,右側會本機資訊和時間。這并不是預設設定,但是配置tmux的狀态行非常容易,在後面我會簡單的介紹如何配置tmux,并提供我的配置檔案。
tmux的所有操作必須先使用一個字首鍵進入指令模式,或者說進入控制台,就像vi中的
esc
。預設的字首為
<c-b>
,比較難按,很多人會改為screen中的
<c-a>
,來保持一緻性。可是這和emacs風格的終端回到行首的快捷鍵沖突,我使用的是
c-k
。大家可以根據自己喜好來配置:
| |
輸入
?
顯示所有的bind-key,如圖
如果設定了
setw -g mode-keys vi
,可以使用vi 的
j
k
風格快捷鍵上下浏覽。這些bind-key顯示了所有的tmux操作。按q退出。
下面就介紹一些常用的操作,為了友善大家檢視,所有的bind-key都是系統預設的,而不是我自己配置的。省略了字首鍵。
複制粘貼
-
進入複制模式。[
-
粘貼]
進入複制模式後,可以用vi風格的快捷鍵進行移動(按上文的設定)。按下
sapce
就可以選擇文本。Enter鍵進行複制。然後再通過
]
進行粘貼。
這裡我将複制粘貼設為類似vi的模式,使用
esc
進入複制模式,
v
進入粘貼模式,選擇後
y
進行複制。
<Prefix-p>
進行粘貼.
# Copy and paste like in vim
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
所有的複制都會被記錄到緩沖區,輸入
#
或者
tmux list-buffers
檢視緩沖區,同時也進入了複制模式。也可以使用”=”來選擇并粘貼緩沖區内容。tmux的緩沖區和系統剪貼闆是完全獨立的,為了複制到系統剪貼闆,我做了如下處理,對于mac os X使用者:
第一步:
brew install reattach-to-user-namespace
而後增加配置:
# getting tmux to copy a buffer to system clipboard
set-option -g default-command "reattach-to-user-namespace -l zsh" # or bash...
bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy" \; display-message "Copied tmux buffer to system clipboard"
bind C-v run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"
這樣,在tmux中進行複制後。按下字首鍵後鍵入
y
,就會在狀态欄顯示已粘貼到剪貼闆,如圖
此時,就可以用
cmd-v
進行粘貼了。系統剪貼闆的也可以鍵入
<C-v>
粘貼。(當然,更友善的還是直接
cmd-v
,無需字首鍵)。
對于linux使用者,可以使用xclip,配置如下:
bind y run-shell "tmux show-buffer | xclip -sel clip -i" \; display-message "Copied tmux buffer to system clipboard"
同樣鍵入
y
複制buffer中最新的内容到系統剪貼闆。
session操作
-
deattch目前session。輸入d
重新進入該session。tmux attach [-t sessionname]
-
列出所有session。如圖: 輸入,退出目前session後,tmux ls
即可切換到名字為1的session。tmux attach -t 1
-
重命名目前session$
-
挂起目前session<c-z>
window操作
-
建立一個新的windowc
-
重命名目前windowb
-
關閉目前window&
-
移動到下一個視窗n
-
移動到前一個視窗p
-
切換到上一個視窗l
-
列出所有視窗編号,并進行選擇切換w
-
移動到指定編号的視窗。編号
-
修改視窗編号,相當于排序。.
-
搜尋所有的視窗。非常友善的功能。如圖f
pane操作
-
橫向分割"
-
縱向分割%
-
在pane直接移動方向鍵
-
到下一個paneo
-
調整pane大小opt+方向鍵
-
左右pane交換{ / }
-
橫豎切換空格
-
顯示pane的編号q
-
關閉目前panex
我的配置将分割操作改為vi風格的
v
和
s
,而pane之間的跳轉也改為vi風格,調整pane的大小也是一樣。配置如下:
# split windows like vim. - Note: vim's definition of a horizontal/vertical split is reversed from tmux's
unbind '"'
unbind %
unbind s
bind s split-window -v
bind S split-window -v -l 40
bind v split-window -h
bind V split-window -h -l 120
# navigate panes with hjkl
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# resize panes like vim
bind < resize-pane -L 10
bind L resize-pane -L 100
bind > resize-pane -R 10
bind R resize-pane -R 100
bind - resize-pane -D 5
bind D resize-pane -D 36
bind + resize-pane -U 5
bind U resize-pane -U 35
# swap panes
bind ^u swapp -U
bind ^d swapp -D
同時還綁定了
bind q killp
使用
q
來關閉pane,免去了關閉确認.但是會覆寫掉原有的
p
操作,顯示pane編号。我不需要這個,覆寫就覆寫了。
腳本化tmux
tmux可以進入指令行模式,快捷鍵為
:
。而且運作的指令在不同的session中都會生效。我綁定了一個指令:
bind r source-file ~/.tmux.conf \; display "Configuration Reloaded!"
這樣隻要輸入
r
,就可以重新加載tmux.conf配置檔案。
還可以用來進行自動化布局,例如:
selectp -t 0
splitw -h -p 50
selectp -t 1
splitw -v -p 40 'node'
selectp -t 2
将其儲存在随便在一個檔案中,而後使用和上述類似的
source-file
加載該檔案,就會分隔三個pane,其中一個pane 會輸入node,開啟一個node的js shell。其中的50,40 為占視窗大小的百分比。
同時,tmux還支援運作shell腳本。可以寫一個shell腳本進行各種環境初始化和布局初始化。這裡就不再介紹了。
狀态欄
tmux的狀态欄配置非常簡單。相比screen就…… 比如我的配置中:
set -g status-left "#[fg=green]s#S:w#I.p#P#[default]"
這一行就将狀态欄左側配置為:
綠色,#S,#I,#p分别表示session,window,pane編号。
當然,你可以讓狀态行更強大,可以使用tmux-powerline。 如圖
是一個示例樣式。 不過我還是喜歡簡潔,而且大多數的資訊其實都沒什麼用。自己并沒有使用,不過還是推薦大家試一試,使用也不複雜,按照說明一步步來就可以了。使用powerline需要使用pathc過的字型,在這裡可以找到一些,當然也可以自己patch。
最後提供我的整個配置檔案,可以在我的dotfiles的tmux目錄下找到。
歡迎留言交流。也可以關注我的微網誌foocoder。
轉載于:https://www.cnblogs.com/noTice520/p/tmux.html