🎯 重點摘要: tmux 是一個 terminal multiplexer(終端機多工器),一個視窗管理多個終端工作:
  ① Session 存活:SSH 斷線程式照跑,重連 attach 回來繼續工作
  ② 視窗分割:一個螢幕同時看編輯器、日誌、測試結果
  ③ 多重工作區:Session → Window → Pane 三層架構,像瀏覽器分頁一樣切換
  ④ 高度客製化:透過 .tmux.conf 打造專屬開發環境

你有沒有過這種經驗:SSH 連到伺服器跑一個長時間的編譯或訓練任務,網路一抖斷線,所有進度全部歸零?或者在一個終端機視窗裡開了七八個分頁,一邊跑 server、一邊看 log、一邊下指令,切到頭昏眼花?

tmux 就是為了解決這些問題而生的。它在伺服器(或本機)上建立一個常駐的終端工作環境,你的程式跑在 tmux 裡而不是 SSH 連線裡 — 連線斷了,工作照樣跑;回家重連,attach 上去什麼都還在。這篇文章會帶你從安裝、核心概念、日常操作快捷鍵,一路到 .tmux.conf 進階配置,把 tmux 學好學滿。

📌 本文對應 tmux 3.x 版本。tmux 採 ISC 授權,是 OpenBSD 專案的子計畫,macOS 與主流 Linux 發行版的套件庫都有收錄。

tmux 是什麼?為什麼你需要它?

tmux = terminal multiplexer,翻成中文就是「終端機多工器」。它做了三件大事:

  • Session 持久化:終端工作階段獨立於連線存在,SSH 斷線、終端機關掉,session 裡的程式照跑不誤
  • 畫面分割:一個視窗切成多個 pane,同時盯著編輯器、日誌和監控儀表
  • 多工作區:多個 session、每個 session 多個 window,像瀏覽器分頁一樣自由切換

最經典的使用場景就是 SSH + 長時間任務:訓練模型、跑資料庫 migration、編譯大型專案,全部丟進 tmux 裡執行,網路再怎麼不穩都不用怕。

核心概念:Session、Window、Pane

tmux 的架構是三層式,理解這個架構,快捷鍵就不用死背:

層級 比喻 說明
Session 瀏覽器的「視窗」 最高層工作區,彼此獨立。例如一個 session 跑公司專案、一個跑 side project
Window 瀏覽器的「分頁」 Session 內的全螢幕工作區,狀態列上會顯示 0、1、2… 編號
Pane 分頁裡的「分割畫面」 Window 內再切出的區塊,可以左右分、上下分,各自跑各自的 shell

記住這個順序:Session 包 Window,Window 包 Pane。所有 tmux 快捷鍵都是在這三層之間移動和管理。

安裝教學

macOS (Homebrew)

brew install tmux

Linux 各發行版

# Ubuntu / Debian
sudo apt update && sudo apt install tmux

# Fedora / RHEL / CentOS
sudo dnf install tmux

# Arch Linux
sudo pacman -S tmux

# openSUSE
sudo zypper install tmux

Windows (WSL)

Windows 本身的終端機不支援 tmux,但透過 WSL2 就能完整使用:

# 先安裝 WSL2 + Ubuntu (PowerShell 系統管理員)
wsl --install

# 進入 WSL 後照 Ubuntu 的方式安裝
sudo apt update && sudo apt install tmux

從原始碼編譯(取得最新版)

如果系統套件庫的版本太舊(例如 CentOS 7 只有 tmux 1.8),可以自己編:

sudo apt install -y build-essential libevent-dev ncurses-dev git
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
sudo make install

確認安裝成功

tmux -V
# 輸出類似: tmux 3.4

第一次使用:Session 生命週期

先掌握最基本的操作循環:建立 → 分離 → 回來

# 建立一個新 session(匿名)
tmux

# 建立有名字的 session(推薦,之後好認)
tmux new -s work

# 分離 (detach):離開但 session 繼續跑
# 快捷鍵:Ctrl-b 然後按 d

# 列出所有 session
tmux ls

# 重新接回 session
tmux attach -t work

# 刪除指定 session
tmux kill-session -t work
💡 實測斷線存活:在 tmux 裡跑 top,按 Ctrl-b d 分離,然後把終端機整個關掉。重新打開終端機輸入 tmux attach — top 還在跑,畫面跟離開前一模一樣。

快捷鍵大全

tmux 所有快捷鍵都要先按 prefix(預設 Ctrl-b)再按功能鍵。例如分離是「按住 Ctrl 和 b,放開,再單獨按 d」。

Session 管理

快捷鍵 功能
Ctrl-b d 分離目前 session(detach)
Ctrl-b $ 重新命名目前 session
Ctrl-b s 列出所有 session 並切換(互動式選單)
Ctrl-b ( 切到上一個 session
Ctrl-b ) 切到下一個 session

Window 操作

快捷鍵 功能
Ctrl-b c 建立新 window
Ctrl-b , 重新命名目前 window
Ctrl-b n / Ctrl-b p 下一個 / 上一個 window
Ctrl-b 0-9 直接跳到指定編號的 window
Ctrl-b w 互動式列出所有 window(含 session)
Ctrl-b & 關閉目前 window(會要求確認)

Pane 分割與切換

快捷鍵 功能
Ctrl-b % 左右分割(垂直線切開)
Ctrl-b " 上下分割(水平線切開)
Ctrl-b 方向鍵 在 pane 之間移動焦點
Ctrl-b o 輪流切換到下一個 pane
Ctrl-b x 關閉目前 pane(會要求確認)
Ctrl-b z 目前 pane 全螢幕切換(zoom,再按一次還原)
Ctrl-b Space 循環切換 pane 佈局(水平、垂直、網格…)
Ctrl-b Ctrl-方向鍵 調整目前 pane 的大小
Ctrl-b { / Ctrl-b } 與前一個 / 後一個 pane 交換位置
💡 最常用組合推薦:Ctrl-b % 左右分一個編輯器一個終端機,Ctrl-b " 再上下分一塊出來看 log,Ctrl-b z 臨時放大某個 pane 專心看 — 這四個鍵用熟,就夠應付八成的日常場景。

複製模式(捲動與複製)

終端機裡想往上捲看歷史輸出,要進入「copy mode」:

快捷鍵 功能
Ctrl-b [ 進入 copy mode(可用方向鍵 / PgUp / PgDn 捲動)
Ctrl-b PgUp 進入 copy mode 並直接翻頁向上
Space copy mode 中開始選取
Enter 選取完成,複製到 tmux buffer
Ctrl-b ] 貼上 buffer 內容
q 離開 copy mode

指令模式速查表

Ctrl-b : 進入指令模式,可以下所有 tmux 子指令。以下是最常用的幾條:

指令 說明
:new -s 名稱 建立新 session
:split-window -h 左右分割(等同 Ctrl-b %
:resize-pane -U 5 向上擴大 pane 5 行(-D/-L/-R 同理)
:swap-window -t 0 把目前 window 搬到 0 號位置
:source-file ~/.tmux.conf 重新載入配置(改完 conf 不用重開)
:show-messages 顯示 tmux 訊息歷史

不想進指令模式的話,這些也都有對應的 shell 指令,例如 tmux split-window -htmux resize-pane -D 5,適合寫進腳本自動化。

進階配置:打造順手的 .tmux.conf

tmux 的預設快捷鍵對新手不太友善,通常大家都會調整配置。在 home 目錄建立 ~/.tmux.conf,以下是推薦的入門配置:

# ===== 基本設定 =====
# 歷史緩衝行數(預設 2000 太少)
set -g history-limit 50000

# 支援滑鼠:可點擊切換 pane、拖曳調整大小、滾輪捲動
set -g mouse on

# 256 色 + true color 支援
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"

# 事件延遲降到最低,反應更快
set -sg escape-time 0

# 編號從 1 開始(0 離左手太遠)
set -g base-index 1
setw -g pane-base-index 1
# 關閉 window 後編號自動遞補
set -g renumber-windows on

# ===== 快捷鍵優化 =====
# prefix 改成 Ctrl-a(比 Ctrl-b 好按,跟 screen 一致)
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 用更直覺的鍵分割 pane(| 左右、- 上下)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# 新 window / 分割 pane 時保留目前路徑
bind c new-window -c "#{pane_current_path}"

# vim 風格的 pane 切換(h j k l)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Ctrl-r 快速重載配置
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
⚠️ 改完配置要重載才會生效:Ctrl-b : 輸入 source-file ~/.tmux.conf,或直接 tmux source ~/.tmux.conf。prefix 改成 Ctrl-a 之後,上面所有快捷鍵教學的「Ctrl-b」都請自動代換成「Ctrl-a」。

實戰場景:SSH 遠端開發的正確姿勢

tmux 最殺的應用場景是遠端伺服器開發,推薦的工作流:

# 1. SSH 連上伺服器後,建立命名 session
ssh user@server
tmux new -s dev

# 2. 在裡面開好工作環境:一個 pane 跑編輯器、一個跑 server、一個看 log

# 3. 下班直接關終端機(或 Ctrl-b d 分離),session 留在伺服器上

# 4. 隔天重連,一鍵恢復昨天的完整工作環境
ssh user@server
tmux attach -t dev

進階一點,還可以讓多個終端機視窗同步顯示同一個 session,天然適合結對程式或教學演示:

# 第二個終端機視窗(或同事的 SSH 連線)也接上同一個 session
tmux attach -t dev

兩邊看到的畫面完全同步,你敲什麼對方就看到什麼 — 不用開螢幕分享也能 pair programming。

🚀 搭配工具推薦:想要「一鍵還原整套開發環境」(多個 session、每個 session 固定幾個 pane 各跑特定指令),可以再裝 tmuxinatortmuxp,把版面寫成 YAML 定義檔。另外 btop 這類監控工具丟在獨立的 tmux window 裡常駐,也是常見的組合技。

常見問題排解

顏色跑掉、vim 配色怪怪的?

.tmux.conf 加上 true color 支援(見上方配置),並確認 echo $TERM 在 tmux 內外都合理(通常是 tmux-256colorxterm-256color)。

tmux attach 說 "no sessions"?

代表伺服器重開機過或 session 全被殺了 — tmux 的 session 存在記憶體裡,重開機就沒了。重要任務請搭配 nohup 或 systemd service 做雙保險。

滾輪不能往上捲?

確認配置裡有 set -g mouse on,重載後滾輪就會自動進入 copy mode 捲動歷史。

總結

tmux 的學習曲線看起來陡,但拆開來就是三件事:Session 管理保平安、Window 切工作區、Pane 分割螢幕。先把 new -sCtrl-b dtmux attach 這條主線用熟,再慢慢補 pane 操作和配置優化,一週就能內化成肌肉記憶。

🎯 快速上手: brew install tmux(或 apt install tmux)→ tmux new -s dev 開第一個 session → Ctrl-b % 分割畫面 → Ctrl-b d 分離 → tmux attach -t dev 回來。記住:先讓 SSH 斷線不再恐懼,其他快捷鍵之後慢慢學都來得及。