Tmux
是一個 Linux (Mac OS也支援)下的終端複用器,相較於 Screen
更為強大,但快捷鍵和操作邏輯也更復雜,一段時間不用,就很容易忘記相關的命令和快捷鍵。本文旨在透過一個簡單的場景,快速重拾 Tmux
Tmux
通常用來保持會話(session),如果我們透過 ssh 連線伺服器處理打包等的耗時操作,那麼網路波動可能會導致連線斷開,使得操作失敗,使用 Tmux
會話會被保持,任務依然會繼續,我們可以隨時恢復會話
Tmux
另一個常用的功能是分屏,快速地建立 Window
和 Pane
,方便地在不同的任務間穿梭
修改配置
vim ~/.tmux.conf
# 將預設修飾鍵(prefix) ctrl + b 修改:ctrl + a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# 啟用滑鼠模式
set-option -g -q mouse on
# 修改分屏快捷鍵
# 左右分屏
bind h split-window -h
# 上下分屏
bind v split-window -v
# 可以取消預設的分屏快捷鍵對映
# unbind '"'
# unbind %
# 將 tmux 的複製模式鍵繫結設定為 vi 模式
setw -g mode-keys vi
重新載入 Tmux 配置檔案
tmux source-file ~/.tmux.conf
命令 & 快捷鍵
命令
這些命令大多是用於 tmux Session 的增刪改查,一些命令進入 tmux 後將無法使用
# 建立新的 session
tmux new -s <session-name>
# 刪除 seesion
tmux kill-session -t 0
# 重新命名 seesion
tmux rename-session -t 0 <new-name>
# 檢視 所有 session
tmux ls
# 進入最近使用的 session
tmux attach
# 進入編號為 1 的 session
tmux attach -t 1
可以定義一些 alias 簡化輸入
# 新增到 shell 初始化指令碼中
# Bash Shell 是 ~/.bashrc
# Zsh Shell 是 ~/.zshrc
alias tnew='tmux new -s'
alias tatt='tmux attach'
alias tkill='tmux kill-session -t'
alias tkillall='tmux kill-session -a'
alias tname='tmux rename-session -t'
alias tls='tmux ls'
快捷鍵
在使用下面的快捷鍵之前,都需要先按 tmux 的修飾鍵(prefix),修改後的修飾鍵為:Ctrl + a;具體做法是:先按住 Ctrl 再按一下 a,這時可以鬆開 Ctrl 和 a,這時 prefix 已經生效了,我們可以加上下面的任意按鍵以實現對應的功能
tmux 有 Session
、Window
、Pane
這三個比較重要的概念
會話 Seesion
- d:分離會話(detach)
- $:修改當前 Session 名稱
- s:顯示 Session 列表(session)
視窗 Window
- c:建立一個新的 Window (create)
- p:切換到上一個 Window(previous)
- n:切換到下一個 Window(next)
- w:顯示 Window 列表(window)
- ,:修改當前 Window 的名稱
- 數字鍵:切換到對應編號的 Window,比如 prfix + 0 就是切換到編號為 0 的 Window
窗格 Pane
- %:建立一個 Pane(水平排布),使用前面的配置後,可以使用 h(horizontal)
- ":建立一個 Pane(垂直排布),使用前面的配置後,可以使用 v(vertical)
- 空格:Pane 的垂直排布和水平排布之間相互轉換
- x:移除當前 Pane,會出現提示是否需要 kill-pane,輸入 y 確認,也可以使用 ctrl + d(無需按 prefix)直接終止 pane
- z:全屏當前 Pane
- ;:將遊標移動到上次使用的 Pane
- o:將遊標移動到下一個 Pane(順時針)
- Ctrl + o:旋轉當前視窗的pane,下一個 Pane 會代替上一 Pane 的位置,遊標會保持在原 Pane
- Alt + 方向鍵:以 5 個單元格為單位移動邊緣以調整當前皮膚大小
複製文字
- [:進入複製模式,因為我們配置了
setw -g mode-keys vi
所以我們可以直接用 vim 的快捷鍵跳轉單詞或者行
我們可以透過 空格鍵
開始選中,這時移動遊標可以擴大選取,按 回車
完成文字複製
- ]:貼上複製的文字
進入複製模式後,可以透過 q
退出複製模式
場景
tmux 就像 vim 一樣,如果不經常使用,就很容易忘記快捷鍵,可以透過一個場景把這些零碎的知識串起來,同時場景也方便重複練習和舉一反三
我們可以在 tmux 裡,編譯執行一個 c 的 hello world,prefix
預設為 Ctrl + b
,配置裡我們修改為 Ctrl + a
- 使用 tmux 建立新的 Session,並指定名稱為:run-c
# 使用 alias 的話可以用 tnew run-c
tmux new -s run-c
-
我們可以使用
prefix + ,
將 Windows 名稱修改為hello-world
-
使用 vim 編輯 hello.c
vim hello.c
按 i
進入 vim 的編輯模式,輸入:
#include<stdio.h>
int main(){
printf("hello world\n");
}
按ESC
退出編輯模式,鍵入 :w
儲存輸入
-
使用
prefix + %
(修改了配置則可以使用 prefix + h)在右側新增一個新的 Pane 用於編譯 -
新增的 Pane 將螢幕一分為二,但是編譯不需要這麼大,我們可以透過
prefix + Alt + 右方向鍵
縮小 Pane 寬度,按完 prefix 後,可以多次按Alt + 右方向鍵
持續縮小 Pane 寬度 -
在右側 Pane 我們可以使用
gcc hello.c
編譯 hello.c -
使用
./a.out
執行 hello world 程式 -
使用
prefix + ;
,將遊標切換回左側 Pane,如果覺想暫時收起右側的Pane
,可以用prefix + z
,最大化或取消最大化當前Pane
-
我們可以繼續編輯檔案,輸入
i
進入 vim 編輯模式,將world
,修改為tmux
,按ESC
退出編輯模式,鍵入:w
儲存輸入 -
使用
prefix + ;
,將遊標切換回右側 Pane,完成編譯和執行
gcc hello.c
./a.out
-
使用
prefix + x
,關閉右側 Pane,按y
確認關閉 -
使用
prefix + d
(tmux detach),將當前會話與視窗分離,回到我們自己的 Shell -
使用
tmux attach
(修改了配置則可以使用tatt
),回到我們剛出 detach 的 Session
參考資料
tmux: some considerations, some best practices
How to Boost 10X Productivity with Tmux
Tmux 使用教程 - 阮一峰
手把手教你使用終端複用神器 tmux
Tmux + Vim 工作流! 同時操作多個專案, 追求極致的絲滑流暢!
「TMUX」十分鐘掌握 tmux -- 高效的終端複用工具 : )
十分鐘掌握 TMUX
Y分鐘速成X,其中 X=tmux
Tmux的快捷鍵,包括調整視窗大小