1. 程式人生 > >Tmux常用快捷鍵以及我會常到的一些問題彙總

Tmux常用快捷鍵以及我會常到的一些問題彙總

今天部署測試伺服器環境

使用到了tmux 剛開始我把tmux想象成了像omzsh這種shell 但是被指出是錯誤的,tmux類似於在shell裡面的軟體。我還真是第一次接觸到這個概念。

首先安裝

brew install tmux

我在安裝的時候並沒有遇到什麼問題。

 

1. open session

$ tmux new-session -s basic
或者
$ tmux new -s basic

-s引數表示session名稱,如果不加-s引數,那麼Tmux預設會新建一個以數字(下標從0開始)命名的session,並預設開啟一個window。開啟一個session後,後續的所有控制Tmux本身的快捷鍵都需要加字首,預設是 Ctrl+b 

,以下把字首按鍵稱為Prefix。

2. detach session 
想要暫時離開Tmux,回到終端環境時,可以通過快捷鍵 Prefix+d (d for detach)。要注意的時,即使是detach的狀態,Tmux中在執行的程式還會繼續執行。想要回到Tmux session時,只需執行:

$ tmux attach -t basic

-t引數可以指定要attach的session。

3. list session 
終端中執行 tmux ls (ls for list session)可以列出當前有多少個session。如果已經在session中,執行 Prefix+s 

(s for session)可以列出當前有多少個session,並且可通過上、下鍵選擇要進入的session。

4. kill session 
要真正關閉一個session,可以在終端下執行命令 tmux kill-session -t basic ,其中-t引數表示session名稱。

二. window 
如果說session是個不可見的東西,那麼window就是我們輸入、執行命令的地方。一個session可以包含多個window。把window類比成iTerm2中的標籤應該就理解了。

1. 建立window 
在建立session的時候預設會建立一個以"數字下標+bash"命名的window,並且名稱隨著bash中執行的不同命令而變化。在新建session時可以通過-n引數指定預設開啟的window名稱,比如通過 tmux new -s basic -n win 

命名一個win名稱的window。也可以隨時通過 Prefix+, 來修改window名稱。

2. 切換window 
類似標籤,我們可以通過一些快捷鍵在同一個session下的多個window之間切換。比如:

Prefix+p (p for previous):切換到上一個window。 
Prefix+n (n for next): 切換到下一個window。 
Prefix+0 : 切換到0號window,依次類推,1、2、3... 
Prefix+w (w for windows): 列出當前session所有window,通過上、下鍵可以選擇切換到指定window。

3. 關閉window 
Prefix+& : 關閉當前window。

三. pane 
一個window可以切割成多個pane,也就是所謂的分屏,算是Tmux的核心功能之一。

1. 分屏 
Prefix+% : 垂直分屏,用一條垂線把當前視窗分成左右兩屏。 
Prefix+" : 水平分屏,用一條水平線把當前視窗分成上下兩屏。

2. 切換pane 
預設情況下,被選中(啟用狀態下)的pane會被綠色邊框高亮突顯出來。 
Prefix+o : 依次切換當前視窗下的各個pane。 
Prefix+Up|Down|Left|Right : 根據按箭方向選擇切換到某個pane。 
Prefix+Space (空格鍵): 對當前視窗下的所有pane重新排列布局,每按一次,換一種樣式。 
Prefix+z : 最大化當前pane。再按一次後恢復。

3. 關閉pane 
Prefix+x : 關閉當前使用中的pane。

關於Tmux的三個核心概念(session、window和pane)及其基本用法已經介紹完畢。接下來的是一些個性化配置和奇技淫巧,包括重新繫結快捷鍵、自定義快捷鍵、UI樣式、滑鼠支援、複製貼上等等,這些可配置的高階功能也是Tmux受人推崇的原因。Tmux配置檔案推薦放在~/.tmux.conf檔案中,避免某個使用者修改配置影響到其他使用者,修改配置檔案後要經過reload操作才會在已開啟session中生效。

一. 重新繫結快捷鍵 
Tmux的很多預設配置不夠友好,需要個人重新定義。

unbind C-b
set -g prefix C-a
 
bind C-a send-prefix
 
bind r source-file ~/.tmux.conf \; display "tmux.conf reload!"
 
bind | split-window -h
bind - split-window -v
 
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
 
set -g base-index 1
set -g pane-base-index 1

第1-2行表示重新定義Prefix,把預設的 Ctrl+b 換成 Ctrl+a ,便於單手操作。 
第4行重新定義 Ctrl+a 組合鍵,當 Prefix + Ctrl+a 按下後,等同於原先 Ctrl+a 功能,解決Ctrl+a被設定為Prefix後已有快捷鍵失效的問題,也就是說只要按下兩次 Ctrl+a ,就能實現原先終端下回到行首的功能。 
第6行定義新的快捷鍵 Prefix+r ,重新載入Tmux配置檔案,避免每次要進入命令模式reload配置。 
第8-9行重新定義分屏快捷鍵。使用 Prefix+| 代替 Prefix+% 實現垂直分屏,使用 Prefix+- 代替 Prefix+" 實現水平分屏。|和-的符號本身就可以表示分屏線形狀,非常直觀。 
第11-14行重新定義上下左右方向鍵,遵循vi習慣。定義以後,任何需要上下左右方向鍵的場景都可以用hjkl替代。 
第16行表示將window的起始下標設為1。因為標準鍵盤的0在9後面, Prefix + 0/1/2 ...切換不便。 
第17行表示將pane的起始下標設為1。理由同上。

二. 滑鼠支援

set-window-option -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

第1行表示啟用滑鼠。雖然Tmux推薦用鍵盤完成所有操作,但是對現代開發人員來說,純鍵盤操作的習慣並非那麼容易養成,因此啟用滑鼠配置成為標配。 
第2行表示支援滑鼠選擇pane。 
第3行表示支援滑鼠調整pane大小。 
第4行表示支援滑鼠選擇window。

三. UI樣式調整

setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
 
set -g status-justify left
 
setw -g monitor-activity on

第1-3行表示狀態列中window標籤的高亮樣式,預設是綠底黑字,設定後當前window紅底白字顯示。 
第5行表示狀態列中window列表左對齊排列。 
第7行表示非當前window有內容更新時顯示在狀態列。

四. 複製貼上 
預設情況下,按 Prefix+[ 進入複製模式,按回車(Enter)退出複製模式。可以通過配置在複製模式中使用vi習慣操作:

setw -g mode-keys vi

在複製模式下,按空格鍵(Space)開始複製,按回車(Enter)完成複製,並退出模式,按 Prefix+] 貼上。這些快捷鍵也可以通過以下配置進行修改,使操作更加靠近vi。

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

第1-2行表示重新繫結Escape鍵, Prefix+Escape 為進入複製模式。 
第3-4行表示重新繫結p鍵, Prefix+p 為貼上。 
第5行表示重新繫結v鍵, Prefix+v 為開始複製。 
第6行表示重新繫結y鍵, Prefix+y 為完成複製。

要檢視當前複製的內容,可以在 Prefix+: 後出現的命令列中輸入 show-buffer ,輸入 list-buffers 可以列出所有的複製歷史內容。 
關於複製貼上,更深入的話題是Tmux和系統剪貼簿之間的互動,Linux可以使用xclip,Mac可以使用tmux-MacOSX-pasteboard,不過我沒有試驗成功,暫時可以通過ALT + 滑鼠複製內容到系統剪貼簿。

五. 多屏操作 
預設情況下,一個window上只有一個pane被啟用,接收鍵盤互動。但是某些場景下需要在多個pane中執行相同的操作,比如同時修改兩臺或更多臺遠端機器的nginx配置,這時候可以在分屏後按 Prefix+: 進入命令模式,輸入 set synchronize-panes ,即可進入批量操作模式,要退出批量操作模式,再次輸入 set synchronize-panes 即可。