tmux - 多個終端管理工具

tmux_cover.png
tmux_cover.png

簡言: 
tmux是多個終端管理器。它使您可以在一個終端中建立多個程序終端及可以相互之間切換,分離(程序仍然在後台繼續運行)。

安裝:
'Ubuntu 安裝 tmux'
sudo apt update && sudo apt install tmux -y

使用:

TMUX_02.PNG
TMUX_02.PNG

根據圖示很好地理解tmux的層級結構

輸入[[tmux]]即可建立一個新的 [[session]],在新的session中預設有一個新的[[windows]]視窗,而在windows視窗可以分割成多個 [[panes]]。

TMUX_03.JPG
TMUX_03.JPG


Panes(分割視窗)
在 tmux 的環境中,若想要將 window 視窗分割成多個 pane,並管理建立的 panes,可以使用以下的操作組合鍵:
組合鍵說明
[[Ctrl]]+[[b]] 再輸入 [[%]]垂直分割視窗。
[[Ctrl]]+[[b]] 再輸入 [["]]水平分割視窗。
[[Ctrl]]+[[b]] 再輸入 [[o]]以輪流方式輪流切換 pane。
[[Ctrl]]+[[b]] 再輸入 [[方向鍵]]切換至指定方向的 pane。
[[Ctrl]]+[[b]] 再輸入 [[空白鍵]]切換佈局。
[[Ctrl]]+[[b]] 再輸入 [[!]]將目前的 pane 抽出來,獨立建立一個 window 視窗。
[[Ctrl]]+[[b]] 再輸入 [[x]]關閉目前的 pane。

Panes Size(調整分割視窗尺寸)
組合鍵說明
[[Ctrl]]+[[b]] 再按下[[Alt]]+[[方向鍵]]調整視窗上下左右調整分割的視窗大小。

Windows
若要建立與管理多個 windows 視窗,可以使用以下的操作組合鍵:
組合鍵說明
[[Ctrl]]+[[b]] 再輸入 [[c]]建立新 window 視窗(create)。
[[Ctrl]]+[[b]] 再輸入 [[w]]以視覺化選單切換 window 視窗(很好用)。
[[Ctrl]]+[[b]] 再輸入 [[n]]切換至下一個 window 視窗(next)。
[[Ctrl]]+[[b]] 再輸入 [[p]]切換至上一個 window 視窗(previous)。
[[Ctrl]]+[[b]] 再輸入 [[數字鍵]]切換至指定的 window 視窗。
[[Ctrl]]+[[b]] 再輸入 [[&]]關閉目前的 window 視窗。

Sessions
每執行一次 tmux 就會新建一個 session

如要列出目前所有的 sessions

tmux ls
0: 1 windows (created Thu May 20 03:28:07 2021) (attached)
4: 1 windows (created Thu May 20 04:02:53 2021)

在切換視窗時,如果不清楚每個視窗的內容,推薦使用 [[Ctrl]]+[[b]] 再輸入 [[w]] 的方式,以選單配合預覽的方式選擇視窗。

TMUX_04.JPG
TMUX_04.JPG

常用指令:
新增
tmux
新增session自定名稱
tmux new -s <your_session_name>
session 列表
tmux ls
重新連線 session
tmux a -t 0
重新連線 指定session名稱
tmux a -t <session_name>
刪除 session
tmux kill-session -t 0
刪除指定session
tmux kill-session -t <session_name>
刪除全部session
tmux kill-session -a > 全部
刪除 tmux server
tmux kill-server
重新命名 session
tmux rename-session -t 0 <new_session_name>

tmux 環境下,可以利用以下的操作組合鍵來操作 sessions:

組合鍵說明
[[Ctrl]]+[[b]] 再輸入 [[$]]重新命名目前的 session。
[[Ctrl]]+[[b]] 再輸入 [[d]]分離目前的 session(detach),離開 tmux 環境。
[[Ctrl]]+[[b]] 再輸入 [[s]]以視覺化選單切換 session(select,很好用)。
[[Ctrl]]+[[b]] 再輸入 [[L]]切換至上一個使用過的 session。
[[Ctrl]]+[[b]] 再輸入 [[(]]切換至上一個 session。
[[Ctrl]]+[[b]] 再輸入 [[)]]切換至下一個 session。

在 tmux 環境之下切換 session 的時候,使用 [[Ctrl]]+[[b]] 再輸入 [[s]] 的方式,可以快速預覽每個 session 並選擇需要的 session。

TMUX_05.JPG
TMUX_05.JPG

Tmux的個性化設定:

啟用Tmux的256色彩支援

echo 'set -g default-terminal "screen-256color"' >>   ~/.tmux.conf

啟用在Tmux 的鼠標滾動模式

開啟新的tmux就可以透過tmux往回滾動查看歷史記錄。
echo "set -g mouse on" >>  ~/.tmux.conf
也可以手動啟用, 按 [[Ctrl]] + [[B]] 鍵,然後按“[[ [ ]]或者[[ ] ]]”鍵。例如向上/向下箭頭、[[Page up]]/[[Page down]]等。

當用戶完成滾動時,他可以通過按 [[Q]] 鍵退出 Tmux 的滾動模式。

在 Tmux 的鼠标滾動模式下复制一个项目

如果需要在單個Pane內複製內容,需要啟用這功能,選取已是複製。
vim  ~/.tmux.conf
set -g mouse on
bind -n WheelUpPane {
if -F '#{==:#{window_name},nvim}' {
send-keys -M
} {
copy-mode -e
}
}

結語:
我是在編譯OpenWrt固件時留意到tmux的優點,通常需要SSH進入到編譯主機內進行, 在編譯的進程中不能關閉SSH視窗(編譯的過程是漫長),而tmux就很方便地解決這問題。

參考:

Linux tmux 終端機管理工具使用教學
How to scroll up and down in Tmux