Tmux 配置:打造最適合自己的終端複用工具
如果說有什麼工具可以用相見恨晚 來形容的話,Tmux 算一個。
Tmuxs 是一款優秀的終端複用工具,使用它最直觀的好處就是,通過一個終端登入遠端主機並執行tmux後,在其中可以開啟多個控制檯而無需再“浪費”多餘的終端來連線這臺遠端主機;
功能
- 提供了強勁的、易於使用的命令列介面。
- 可橫向和縱向分割視窗。
- 窗格可以自由移動和調整大小,或直接利用四個預設佈局之一。
- 支援 UTF-8 編碼及 256 色終端。
- 可在多個緩衝區進行復制和貼上。
- 可通過互動式選單來選擇視窗、會話及客戶端。
- 支援跨視窗搜尋。
- 支援自動及手動鎖定視窗。
- 可以自由配置繫結快捷鍵。
Tmux 重要概念
使用 Tmux 的時候千萬不要去背指令,所有的指令都可以在 .tmux.conf
這個是我的配置檔案:https://github.com/zuorn/tmux.conf
在Tmux邏輯中,需要分清楚Server > Session > Window > Pane這個大小和層級順序是極其重要的,直接關係到工作效率:
- Server:是整個tmux的後臺服務。有時候更改配置不生效,就要使用tmux kill-server來重啟tmux。
- Session:是tmux的所有會話。我之前就錯把這個session當成視窗用,造成了很多不便裡。一般只要儲存一個session就足夠了。
- Window:相當於一個工作區,包含很多分屏,可以針對每種任務分一個Window。如下載一個Window,程式設計一個window。
- Pane:是在Window裡面的小分屏。最常用也最好用
瞭解了這個邏輯後,整個Tmux的使用和配置也就清晰了。
(ps:下面這種方便好看的Status bar狀態列,顯示的是windows,而不是sessions)
安裝
在 Mac OS 中,通過 brew 安裝
brew install tmux
ubuntu版本下直接apt-get安裝
sudo apt-get install tmux
centos7版本下直接yum安裝
yum install -y tmux ```sh centos6版本需要編譯安裝 ```sh yum install libevent libevent-devel ncurses-devel tar -zvxf tmux-2.3.tar.gz # (提前下載:wget https://github.com/tmux/tmux/releases/download/2.3/tmux-2.3.tar.gz) cd tmux-2.3 ./configure make && make install
Tmux 常用命令
#啟動新session:
$ tmux [new -s 會話名 -n 視窗名]
#恢復session:
$ tmux at [-t 會話名]
#列出所有sessions:
$ tmux ls
#關閉session:
$ tmux kill-session -t 會話名
#關閉整個tmux伺服器:
$ tmux kill-server
Tmux 常用內部命令
所謂內部命令,就是進入Tmux後,並按下字首鍵後的命令,一般字首鍵為Ctrl+b. 雖然ctrl和b離得很遠但是不建議改字首鍵,因為別的鍵也不見得方便好記不衝突。還是記憶預設的比較可靠。
系統指令:
字首 | 指令 | 描述 |
---|---|---|
Ctrl+b | ? | 顯示快捷鍵幫助文件 |
Ctrl+b | d | 斷開當前會話 |
Ctrl+b | D | 選擇要斷開的會話 |
Ctrl+b | Ctrl+z | 掛起當前會話 |
Ctrl+b | r | 強制過載當前會話 |
Ctrl+b | s | 顯示會話列表用於選擇並切換 |
Ctrl+b | : | 進入命令列模式,此時可直接輸入ls等命令 |
Ctrl+b | [ | 進入複製模式,按q退出 |
Ctrl+b | ] | 貼上複製模式中複製的文字 |
Ctrl+b | ~ | 列出提示資訊快取 |
視窗(window)指令:
字首 | 指令 | 描述 |
---|---|---|
Ctrl+b | c | 新建視窗 |
Ctrl+b | & | 關閉當前視窗 |
Ctrl+b | 0~9 | 切換到指定視窗 |
Ctrl+b | p | 切換到上一視窗 |
Ctrl+b | n | 切換到下一視窗 |
Ctrl+b | w | 開啟視窗列表,用於且切換視窗 |
Ctrl+b | , | 重新命名當前視窗 |
Ctrl+b | . | 修改當前視窗編號(適用於視窗重新排序) |
Ctrl+b | f | 快速定位到視窗(輸入關鍵字匹配視窗名稱) |
面板(pane)指令:
字首 | 指令 | 描述 |
---|---|---|
Ctrl+b | " | 當前面板上下一分為二,下側新建面板 |
Ctrl+b | % | 當前面板左右一分為二,右側新建面板 |
Ctrl+b | x | 關閉當前面板(關閉前需輸入y or n確認) |
Ctrl+b | z | 最大化當前面板,再重複一次按鍵後恢復正常(v1.8版本新增) |
Ctrl+b | ! | 將當前面板移動到新的視窗開啟(原視窗中存在兩個及以上面板有效) |
Ctrl+b | ; | 切換到最後一次使用的面板 |
Ctrl+b | q | 顯示面板編號,在編號消失前輸入對應的數字可切換到相應的面板 |
Ctrl+b | { | 向前置換當前面板 |
Ctrl+b | } | 向後置換當前面板 |
Ctrl+b | Ctrl+o | 順時針旋轉當前視窗中的所有面板 |
Ctrl+b | 方向鍵 | 移動游標切換面板 |
Ctrl+b | o | 選擇下一面板 |
Ctrl+b | 空格鍵 | 在自帶的面板佈局中迴圈切換 |
Ctrl+b | Alt+方向鍵 | 以5個單元格為單位調整當前面板邊緣 |
Ctrl+b | Ctrl+方向鍵 | 以1個單元格為單位調整當前面板邊緣(Mac下 |
Ctrl+b | t | 顯示時鐘 |
我的配置檔案
使用
$ git clone [email protected]:zuorn/tmux-config.git
$ cp tmux-config/.tmux.conf ~/.tmux.conf
重啟 tmux restart tmux
或者 在 tmux 視窗中,先按下 Ctrl+b
指令字首,然後按下系統指令:,進入到命令模式後輸入 source-file ~/.tmux.conf
,回車後生效。
配置項
修改指令字首
可根據自己的喜好來設定,如若要啟用,取消註釋即可。
#set -g prefix C-f #
#unbind C-f # C-b 即 Ctrl+b 鍵,unbind 意味著解除繫結
#bind C-f send-prefix # 繫結 Ctrl+f 為新的指令字首
# 從tmux v1.6版起,支援設定第二個指令字首
#set-option -g prefix2 ` # 設定一個不常用的`鍵作為指令字首,按鍵更快些
新增載入配置檔案快捷指令 r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."
支援滑鼠
- 選取文字
- 調整面板大小
- 選中並切換面板
# 老版本:
#setw -g mode-mouse on # 支援滑鼠選取文字等
#setw -g mouse-resize-pane on # 支援滑鼠拖動調整面板的大小(通過拖動面板間的分割線)
#setw -g mouse-select-pane on # 支援滑鼠選中並切換面板
#setw -g mouse-select-window on # 支援滑鼠選中並切換視窗(通過點選狀態列視窗名稱)
# v2.1及以上的版本
set-option -g mouse on
面板
更改新增面板鍵
- 垂直新增面板
- 水平新增面板
unbind '"'
bind - splitw -v -c '#{pane_current_path}' # 垂直方向新增面板,預設進入當前目錄
unbind %
bind = splitw -h -c '#{pane_current_path}' # 水平方向新增面板,預設進入當前目錄
面板調整大小
繫結Ctrl+hjkl鍵為面板上下左右調整邊緣的快捷指令
bind -r ^k resizep -U 10 # 繫結Ctrl+k為往↑調整面板邊緣10個單元格
bind -r ^j resizep -D 10 # 繫結Ctrl+j為往↓調整面板邊緣10個單元格
bind -r ^h resizep -L 10 # 繫結Ctrl+h為往←調整面板邊緣10個單元格
bind -r ^l resizep -R 10 # 繫結Ctrl+l為往→調整面板邊緣10個單元格
複製模式
複製模式更改為 vi 風格
setw -g mode-keys vi # 開啟vi風格後,支援vi的C-d、C-u、hjkl等快捷鍵
複製模式向 vi 靠攏
- v 開始選擇文字
- y 複製選中文字
- p 貼上文字
bind -t vi-copy v begin-selection # 繫結v鍵為開始選擇文字
bind -t vi-copy y copy-selection # 繫結y鍵為複製選中文字
bind p pasteb # 繫結p鍵為貼上文字(p鍵預設用於進入上一個視窗,不建議覆蓋)
優化
設定視窗面板起始序號
set -g base-index 1 # 設定視窗的起始下標為1
set -g pane-base-index 1 # 設定面板的起始下標為1
自定義狀態列
set -g status-utf8 on # 狀態列支援utf8
set -g status-interval 1 # 狀態列重新整理時間
set -g status-justify left # 狀態列列表左對齊
setw -g monitor-activity on # 非當前視窗有內容更新時在狀態列通知
set -wg window-status-format " #I #W " # 狀態列視窗名稱格式
set -wg window-status-current-format " #I:#W#F " # 狀態列當前視窗名稱格式(#I:序號,#w:視窗名稱,#F:間隔符)
set -wg window-status-separator "" # 狀態列視窗名稱之間的間隔
Tmux 常見問題
Tmux不管怎麼改配置檔案,都不產生變化
這個主要是由於Tmux的後臺快取機制造成的。我就犯了個大錯誤:甚至刪了Tmux、重灌Tmux、重啟電腦,都沒達成。
Tmux會有一個叫Tmux-server的東西。只要把它kill,重啟tmux就OK了:
tmux kill-server -a
參考:
- 官方文件
- https://www.cnblogs.com/congbo/archive/2012/08/30/2649420.html
- Tmux 使用手冊
- Tmux的超絕便利 (基礎篇)