1. 程式人生 > >Tmux 配置:打造最適合自己的終端複用工具

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的超絕便利 (基礎篇)