前言
screen 如果是基本版的終端機管理工具,
tmux 就是進階版的,能為我們提供更多的功能,
這篇稍微整理一下我會用到的東西。
這邊只有整理我常用的功能,因此「不是完整的功能整理」。
安裝
- linux:
sudo apt install tmux
- mac:
brew install tmux
先講結論,一張圖整理完我常用功能 「開啟 / 關閉」
sessions 與 windows
我們在使用 screen 的時候,
預設就是一個又一個的 terminal shell,
但有時後我們會想針對這些 shell 做更多「不同任務上的管理」,
例如:一些 shell 負責 A 任務,一些 shell 負責 B 任務…
這時候如果是 screen,我們會看到終端機完全混在一起,
透過 tmux,我們可以直接進行上述更完整的管理。
如果從上面的例子「一些 shell 負責 A 任務,一些 shell 負責 B 任務」
sessions 就是可以負責幫我們開一個 A 任務的 session,
而 windows 就是可以幫我們開多個 shell
架構圖示大概是
- windows
個人常用指令
因為快速鍵「ctrl + B」太過常用,以下 「c+b」 皆等於 「ctrl + B」
啟動 tmux
tmux
session 類
啟用新的 sessions
- 啟用新的 sessions
如果是在 tmux 外面,直接 tmux 即可
tmux
- 啟用新的 session 並命名
tmux new -s <session name>
查看現有的 tmux sessions
- 查看現有的 sessions (windows 只會計算數量)
tmux ls
detach (暫時離開) sessions
- detach sessions
c+b d # (detach)
kill sessions (kill windows 也可以)
快速砍視窗
c+b w # 先查看所有 windows
t # tag, 想砍的打上記號
X # 砍掉
attach session
- 如果都不指定,那就是回到最近的 session (最方便)
tmux attach
# or
tmux a
- attach 回指定的 session
tmux attach <session-name>
tmux attach -t <session-id>
windows 類
「在一個 session」中啟用新的 windows
- 啟用新的 windows
c+b c # (create)
查看現有的 windows
- 查看所有的 windows (非常好用!!!)
c+b w # (select window)
切換 windows
我們一樣也可以用查看所有的 windows,同步做到切換的功能 (非常好用!!!)
c+b w # (select window)
如果只是單純要切換到已知編號的視窗:
c+b <number of window>
刪除 windows
也就是關掉 windows 與其包含的所有 panes
方法1: 「c+b &」
c+b &
方法2: 透過「kill-window」指令
:kill-window -t <window-number>
- 「:kill-window -t
」等效於直接輸入
tmux kill-window -t <window-number>
查看歷史內容
倒退查看歷史內容 scroll tmux
因為 tmux 實際上顯示的內容並不是照著視窗在走,
因此如果我們想要倒退查看之前的 log,
c+b [ # [, 上括弧 我是記有種往前推的感覺?
按方向鍵
q # 退出
(進階) 修改最大歷史紀錄
因為預設的行數有限制 (也避免佔用系統容量),如果要更大的空間我們需要手動修改。
最主要是要新增「~/.tmux.conf」這份文件
echo "set -g history-limit 10000" >> ~/.tmux.conf
- 10000 可以改任意數值,越大可以有越多的歷史紀錄。
(進階) 切割畫面 (使用 pane)
切割畫面個人認為屬於比較進階的功能,
我們可以透過 tmux 直接實現切割畫面
有些 terminal app 設計上也已經有內建這樣的功能,不過 tmux 更好用的地方是在於他是「自身」就能夠進行畫面分割,無須下載新的 terminal app。
這時我們的階層會變成像這樣
- panes
每一層都可以開啟多個下一層。
這時候我們可以下「c+b %」、「c+b “"」
(我的記法:把 % 看的有點像 o|o ,所以是直的,另外「 " 」就記…. 有兩個單撇XDDD 超爛我知道)
在不同的 pane 之間切換,我們可以下「c+b 上下左右」,就可以切換了
這邊要記得,因為可以連續切換,所以在「換到想要的 pane」之後記得先停頓一下。
pane 縮放
有時候我們會想要對於視窗進行調整,這時候我們可以下「c+b(按住) 上下左右」
快速排版 pane
如果透過上面的方式,有時候我們會把版面弄得很亂,
這時候只需要輸入「c+b space」,就可以快速整理成對齊的樣子。
可以多按幾次,切換不同種預設的排版。
關閉 pane
方法1: 「c+b x」
使用 x 他會再跟你確認一次,這時候按 y 即可刪除。
方法2: 「c+d」
這方法不會再跟你確認一次,會直接刪掉 pane。
方法3: 使用「c+b :」先叫出功能表後,輸入「:kill-pane」即可刪除。
範例:在特定的 pane 裡面「:kill-pane」,砍掉該 pane
- 「:kill-pane」等效於直接輸入
tmux kill-pane
問題解決:關於 tmux 畫面出現切割的問題 (tmux resize window)
原因
主要發生原因是同時有多個 shell attach 至同一個 terminal,
因為是「同一個 terminal」,會自動符合某一個 size
解決方法
將 terminal detach 即可,不過有時候可能因為有「斷線」的情況,
導致我們無法回去該 terminal,並進行 detach,
此時我們可以使用「c+b shift+D」(detach target window,是以 window 為單位),
來快速的 detach 各個尚未 detach 的 terminal。
Reference
- Linux tmux 終端機管理工具使用教學
- How to Rename a Session in Tmux
- How to close a tmux session
- How do I scroll in tmux?
- How to do a full length vertical split in tmux
- Is there any way to redraw tmux window when switching smaller monitor to bigger one?
- How do I increase the scrollback buffer size in tmux?
- Tmux常用功能总结
- How to Use tmux for Remote & Local Development
- https://andyyou.github.io/2017/11/27/tmux-notes/


