介紹最基本的 Tmux 使用方式以及相關設定。

看網址就知道又是古老的文章債了,到最近還有在使用,所以就整理一下發出來。

前言

大家在使用終端機時會不會常常開很多視窗,要找到特定視窗時都要消耗一些眼力。今天要來介紹的工具 Tmux 可以大幅減少這類困擾。此外,在遠端進行實驗時也常常會使用這個工具來保持運算的執行,不用擔心現在 ssh 的連線中斷導致正在跑的程式被砍掉。

一堆視窗

一堆視窗

OuO

原理

tmux 是採用 client-server 架構 運作。

  • Server:tmux 啟動後會建立一個背景常駐的 server process(通常是 tmux 本身),管理所有的 session、window、pane 等。
  • Client:當你啟動 tmux 或 attach 到 session 時,你的終端會變成一個 tmux client,與 server 進行通訊。

tmux 有一套結構化的資源管理:

  • Session:一組獨立的作業環境,像一個虛擬桌面。
  • Window:Session 中的視窗,對應到一個完整的 shell。
  • Pane:Window 中的分割區塊,每個 pane 是一個獨立的 pseudo-terminal。
tmux Server
└── Session 1
    ├── Window 1
    │   ├── Pane 1
    │   └── Pane 2
    └── Window 2
        └── Pane 1

安裝

sudo apt install tmux

使用方式

完整使用方式請參考 官方文件

一開始使用可能會有點混亂,先說明一下底下的說明把 tmux 的環境切做外面跟裡面,外是你一開始打開的終端機 (還沒跑 tmux),當執行 tmux 後底下有一條狀態列的是裡面。通常 tmux ... 的指令是打在外面,而 ctrl-b ... 是在裡面按。

啟動 Tmux

tmux

下面出現一排綠色狀態就代表成功進入 tmux,此時代表了 Server 啟動,而且 Client (目前這個終端機畫面) 連上。

tmux 進入畫面

tmux 進入畫面

OuO

離開 Tmux

若只是要暫時離開 tmux 環境而不停止裡面正在執行的內容 (空閒的終端機也算正在執行的程式),可以使用 ctrl-b d (先按 ctrl-b 接著再按 d,在整個快捷鍵中會一直用到 ctrl-b 它又稱作 PREFIX)。此時可以當作 Client 與 Server 斷開連結。

若要離開 session 時沒有任何東西在前景執行則 session 就會被刪除。最直接的方法就是在空閒的終端機按下 ctrl-d 或是輸入 exit 後按下 enter

我們先暫時離開目前的 tmux 然後使用 tmux ls 觀察。它會顯示目前 session 0 中有一個 window 正在執行。

OuO

若想再進入剛剛的 tmux 環境可以使用 tmux attach (tmux a)。Client 就會再次連上 Server。

Session

若是原本就有 session 存在,在外面又輸入一次 tmux (不是使用 tmux a) 則會多新增一個 session。tmux 也支援自定義名稱: tmux new -s NAMEtmux attach -t NAME 可以讓 Client 開啟特定的 session。

named session

named session

OuO

在外刪除特定 session 可使用 tmux kill-session -t NAME。想暴力一次刪除全部則可以使用 tmux kill-server 直接把 Server 刪除,底下的所有 session 也會消失。

Window

使用 ctrl-b c 新增新的視窗,* 表示目前正在哪個視窗。可以用 ctrl-b nctrl-b p 前後移動,或是 ctrl-b 數字 跳到對應編號的 window。ctrl-b , 可以對 window 重新命名。

OuO

Pane

除了 window,tmux 還可以分出左右或上下的窗格。垂直分割畫面 (左右) ctrl b %,水平分割畫面 (上下) ctrl-b "。在窗格間切換使用 ctrl-b 方向鍵

其他好用的快捷鍵

  • PREFIX w: open the dashboard of all sessions and windows
  • PREFIX s: open the dashboard of all sessions
  • PREFIX z: zoom in/out the current pane
  • PREFIX t: show current time
  • PREFIX ?: check all key bindings
  • PREFIX :: change to command mode
  • PREFIX C-k: clear history (scroll back buffer)
  • PREFIX r: reload config

個人化設定

套用新設定前需要刪除所有 session。或嘗試使用 PREFIX r

因為蠻多的預設按鍵我覺得不好按也不好記憶,所以有修改過這類設定,詳細設定可以參考 我個人的 .tmux.conf。下方列出最主要改動:

  • PREFIX = Ctrl-q
  • Create window: PREFIX n
  • Create pane:
    • PREFIX |: split right
    • PREFIX -: split down

其他技巧

Force resize

如果其他 Client 正在連接同一個 Server 可能導致顯示的視窗會不怪怪的有些空間無法使用,這時候可以把該 client detach。 參考

$ tmux list-client
/dev/pts/15: 0 [80x24 xterm-256color] (utf8)

$ tmux detach-client -s 0

重開機恢復

tmux server 預設重開機後就會跟 kill-server 一樣遺失所有 session。如果需要開機後自動復原可以使用 Tmux Plugin Manager 安裝一些外掛 tmux-plugins/tmux-resurrecttmux-plugins/tmux-continuum

本文使用 ChatGPT 4o 協作並產生部分內容

  • ⊛ Back to top
  • ⊛ Go to bottom