如果你常在終端機裡工作,一定遇過這些狀況:SSH 連到遠端伺服器跑一個長時間任務,結果網路一斷、工作就沒了;想一邊看 log 一邊寫程式,只好開一堆終端機視窗切來切去;或是像我一樣在用 Claude Code 的時候,發現滑鼠滾輪竟然沒辦法往上捲看之前的對話。這些問題都可以用 tmux 來解決。這篇文章會從安裝開始,完整介紹 tmux 的使用方式,包含 Session 管理、分割視窗、實用設定,以及怎麼修復在 tmux 中使用 Claude Code 的滑鼠滾輪問題。

tmux 是什麼

tmux 的全名是 terminal multiplexer(終端機多工器)。簡單來說,它讓你在一個終端機視窗裡面,同時管理多個終端機工作階段(Session),還能把畫面切割成多個區塊(Pane)。更重要的是,tmux 的 Session 是獨立於終端機視窗存在的,就算你關掉終端機或是 SSH 斷線,Session 裡面的程式還是會繼續跑,之後可以隨時接回去。

情境沒有 tmux有 tmux
SSH 斷線執行中的工作直接消失Session 持續運作,重新 attach 即可
同時看多個畫面開一堆終端機視窗切來切去一個視窗內分割多個 Pane
長時間任務必須保持連線直到完成Detach 後去做別的事,隨時回來
切換不同專案每個專案開不同終端機分頁用不同 Session 管理,快速切換

安裝 tmux

macOS 安裝

在 macOS 上推薦使用 Homebrew 來安裝,如果還沒裝過 Homebrew 可以參考 macOS Homebrew 新手教學|安裝與使用指南

# 安裝 tmux
brew install tmux

# 確認安裝版本
tmux -V

Linux 安裝

大部分 Linux 發行版的套件庫都有 tmux,直接用套件管理工具安裝就可以。

# Ubuntu / Debian
sudo apt install tmux

# CentOS / RHEL / Fedora
sudo dnf install tmux

# Arch Linux
sudo pacman -S tmux

# 確認安裝版本
tmux -V

核心概念

在開始操作之前,先了解 tmux 的三個核心概念,搞懂這些之後操作就很直覺了。

Session(工作階段):最上層的單位,可以想像成一個獨立的工作區。你可以為不同專案建立不同的 Session,每個 Session 裡面可以有多個 Window。Session 最重要的特性是可以 detach(脫離)和 attach(接回),這就是為什麼 SSH 斷線還能接回去的原因。

Window(視窗/分頁):類似瀏覽器的分頁,每個 Window 佔滿整個終端機畫面。你可以在不同的 Window 之間快速切換,底部的狀態列會顯示目前有哪些 Window。

Pane(窗格):把一個 Window 的畫面分割成多個區塊,每個區塊都是獨立的終端機。你可以水平分割、垂直分割,同時看到多個終端機在運作。

它們的層級關係是:Server > Session > Window > Pane。一個 tmux server 可以有多個 Session,一個 Session 可以有多個 Window,一個 Window 可以有多個 Pane。

另外,tmux 的所有快捷鍵操作都需要先按 Prefix key(預設是 Ctrl + b),然後放開,再按對應的按鍵。例如要建立新 Window,就是先按 Ctrl + b,放開後再按 c。後面的快捷鍵表示中會用 Prefix 代表這個組合。

基本操作教學

Session 管理

Session 是 tmux 最重要的功能,學會建立和管理 Session 就能解決 SSH 斷線的問題。

# 建立一個新的 Session(自動命名 0, 1, 2...)
tmux

# 建立一個有名字的 Session(推薦)
tmux new -s my-project

# 列出所有 Session
tmux ls

# 脫離目前的 Session(回到原本的終端機)
# 在 tmux 裡面按 Prefix + d

# 接回指定的 Session
tmux attach -t my-project
# 簡寫
tmux a -t my-project

# 刪除指定的 Session
tmux kill-session -t my-project

# 在 tmux 裡面切換 Session
# Prefix + s 可以列出所有 Session 並選擇切換

常見的工作流程就是:SSH 連進遠端伺服器後,用 tmux new -s work 建立 Session,開始工作。要離開的時候按 Prefix + d 脫離,然後放心關掉 SSH。下次連進來用 tmux a -t work 就能接回之前的工作狀態,所有程式都還在跑。

Window 管理

Window 就像瀏覽器分頁,當你需要在同一個 Session 裡處理不同任務的時候很方便。

# 建立新的 Window
# Prefix + c

# 切換到下一個 / 上一個 Window
# Prefix + n(next)
# Prefix + p(previous)

# 切換到指定編號的 Window
# Prefix + 0~9

# 重新命名目前的 Window
# Prefix + ,

# 關閉目前的 Window
# Prefix + &

底部的狀態列會顯示所有 Window 的編號和名稱,目前所在的 Window 會有 * 標記。

Pane 管理

Pane 是 tmux 最視覺化的功能,可以把一個 Window 切成多塊同時使用。

# 垂直分割(左右兩塊)
# Prefix + %

# 水平分割(上下兩塊)
# Prefix + "

# 在 Pane 之間移動
# Prefix + 方向鍵

# 將目前的 Pane 放大成全螢幕(再按一次還原)
# Prefix + z

# 調整 Pane 大小
# Prefix + Ctrl + 方向鍵

# 關閉目前的 Pane
# Prefix + x

# 顯示 Pane 編號(按對應數字可以跳過去)
# Prefix + q

Prefix + z 是我最常用的快捷鍵之一,當你分割了很多 Pane 但想暫時專注在其中一個的時候,按一下就可以放大成全螢幕,看完再按一下就還原。

快捷鍵對照表

分類快捷鍵功能
SessionPrefix + d脫離(detach)目前的 Session
SessionPrefix + s列出所有 Session 並切換
SessionPrefix + $重新命名目前的 Session
WindowPrefix + c建立新 Window
WindowPrefix + n / p切換到下一個 / 上一個 Window
WindowPrefix + 0~9切換到指定編號的 Window
WindowPrefix + ,重新命名 Window
WindowPrefix + &關閉 Window
PanePrefix + %垂直分割
PanePrefix + "水平分割
PanePrefix + 方向鍵切換 Pane
PanePrefix + z放大/還原 Pane
PanePrefix + x關閉 Pane
PanePrefix + q顯示 Pane 編號
其他Prefix + [進入捲動模式(copy mode)
其他Prefix + ?列出所有快捷鍵

實際應用情境

SSH 遠端工作不中斷

這是 tmux 最經典的用途。假設你 SSH 連進一台伺服器要跑一個需要好幾個小時的腳本:

# SSH 連進伺服器
ssh user@my-server

# 建立 tmux Session
tmux new -s deploy

# 在 Session 裡面執行長時間任務
./deploy.sh

# 按 Prefix + d 脫離 Session
# 關掉 SSH 連線,去做別的事

# 隔天再連回來
ssh user@my-server
tmux a -t deploy
# 畫面回來了,腳本的輸出都還在

另一個很常見的情境是 SSH 連上遠端 Linux 伺服器跑 apt upgrade。系統升級通常需要一段時間,而且中途斷線可能會讓套件處於安裝到一半的狀態,造成系統不穩定甚至無法正常運作。如果在 tmux Session 裡面跑,就算 SSH 意外斷線,升級程序還是會繼續完成,不用擔心斷到一半。

# SSH 連上伺服器後先開 tmux
ssh user@my-server
tmux new -s upgrade

# 在 tmux 裡面安心跑系統升級
sudo apt update && sudo apt upgrade -y

# 就算網路斷掉也不怕,重新連上後接回去就好
ssh user@my-server
tmux a -t upgrade

開發工作流:一個畫面看全部

開發的時候常常需要同時看好幾個東西:程式碼編輯器、開發伺服器的 log、跑測試的結果。用 tmux 的 Pane 分割就能在一個畫面裡看到全部。

# 建立開發用的 Session
tmux new -s dev

# 垂直分割:左邊寫程式,右邊看 log
# Prefix + %

# 在右邊的 Pane 再水平分割:上面跑 server,下面跑 test
# Prefix + "

# 最後會變成:
# ┌──────────┬──────────┐
# │          │  server  │
# │  editor  ├──────────┤
# │          │  test    │
# └──────────┴──────────┘

搭配 Claude Code 使用

如果你有在用 Claude Code,tmux 更是必備工具。Claude Code 在終端機裡運作,常常會產生大量輸出,用 tmux 可以分割畫面一邊跟 Claude Code 對話、一邊看檔案變更。如果你有使用 Claude Code Agent Teams,多個 Agent 同時協作的時候更需要 tmux 的分割畫面來監控每個 Agent 的工作狀態。

不過在 tmux 裡面跑 Claude Code,第一次一定會遇到一個很惱人的問題——滑鼠滾輪壞了。

解決 Claude Code 滑鼠滾輪問題

我第一次在 tmux 裡面開 Claude Code 的時候,想用滑鼠滾輪往上滑看之前的對話內容,結果畫面完全不會動。滾輪往上滑,出現的是之前輸入過的指令(就像按了上方向鍵),滾輪往下滑就像按了下方向鍵。沒辦法捲動 scroll view 來看之前的內容,非常不方便。

為什麼會這樣

這是因為 tmux 預設不會捕捉滑鼠事件。當你在 tmux 裡面滾動滑鼠滾輪的時候,tmux 不知道你在滾滑鼠,它會把滾輪事件轉換成方向鍵的 escape sequence 送給終端機裡的程式。所以在 Claude Code 裡面滾滑鼠,等於在對 Claude Code 按上下方向鍵,自然就會切換輸入歷史而不是捲動畫面。

修復方法

修復方法非常簡單,只要在 tmux 的設定檔中啟用滑鼠模式就可以了。

# 建立或編輯 tmux 設定檔
vim ~/.tmux.conf

# 加入這一行
set -g mouse on

# 如果你已經在 tmux Session 裡面,重新載入設定讓它立刻生效
tmux source-file ~/.tmux.conf

或是用一行指令完成:

# 把設定寫入檔案並立刻載入
echo 'set -g mouse on' >> ~/.tmux.conf && tmux source-file ~/.tmux.conf

加上 set -g mouse on 之後,tmux 會開始捕捉滑鼠事件,滾輪捲動就會正常進入 copy mode 來捲動畫面內容,在 Claude Code 裡面也能正常地往上滑看之前的對話了。

啟用滑鼠模式後的變化

set -g mouse on 不只修復滾輪問題,還會啟用以下功能:

  • 滑鼠滾輪捲動:滾輪會自動進入 copy mode 捲動畫面
  • 點擊切換 Pane:直接點要操作的 Pane 就能切換過去
  • 點擊切換 Window:在底部狀態列點擊 Window 名稱可以切換
  • 拖曳調整 Pane 大小:拖曳 Pane 邊界可以調整各區塊大小

需要注意的是,啟用滑鼠模式之後,用滑鼠選取文字複製的行為會改變。因為 tmux 會攔截滑鼠事件,直接拖曳選取會進入 tmux 的 copy mode 而不是終端機原生的選取。如果你想用終端機原生的方式選取複製文字,在 Linux 上按住 Shift 再拖曳選取,在 macOS 上按住 Option(⌥)再拖曳選取就可以了。

實用 tmux.conf 設定

tmux 的設定檔是 ~/.tmux.conf,tmux server 啟動時會自動讀取。如果修改了設定檔,需要重新載入才會生效。以下是我推薦的一組實用設定,每個區塊都有註解說明。

推薦設定檔

# ============================
# 基礎設定
# ============================

# 啟用滑鼠支援(滾輪捲動、點擊切換 Pane、拖曳調整大小)
set -g mouse on

# 加大捲動緩衝區(預設只有 2000 行,log 多的時候很快就看不到了)
set -g history-limit 50000

# Window 和 Pane 的編號從 1 開始(鍵盤上 1 比 0 好按)
set -g base-index 1
setw -g pane-base-index 1

# 關閉 Window 之後自動重新編號(避免出現 1, 3, 5 這種跳號)
set -g renumber-windows on

# 支援 256 色(讓 Vim、bat 等工具的顏色正常顯示)
set -g default-terminal "screen-256color"

# 取消 Escape 鍵的延遲(對 Vim / Neovim 使用者很重要,不然按 Esc 會有明顯延遲)
set -s escape-time 0

# ============================
# 快捷鍵綁定
# ============================

# Prefix + r 重新載入設定檔(改完設定不用重開 tmux)
bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"

# 用 | 和 - 來分割視窗(比預設的 % 和 " 直覺多了)
# -c 參數讓新的 Pane 繼承當前目錄
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 新建 Window 也繼承當前目錄
bind c new-window -c "#{pane_current_path}"

# ============================
# 狀態列設定
# ============================

# 狀態列放在上方(個人喜好,也可以不加這行維持底部)
# set -g status-position top

# 狀態列更新頻率(秒)
set -g status-interval 5

# ============================
# Vim 風格操作(選用)
# ============================

# 在 copy mode 中使用 vi 按鍵(用 hjkl 移動、v 選取、y 複製)
setw -g mode-keys vi

# v 開始選取、y 複製選取內容
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-selection-and-cancel

把以上內容貼到 ~/.tmux.conf,然後在 tmux 裡面按 Prefix + r(如果是第一次設定,用 tmux source-file ~/.tmux.conf)就會生效。

自訂 Prefix Key

tmux 預設的 Prefix key 是 Ctrl + b,但不少人會改成 Ctrl + a,因為 a 在鍵盤上離左手小指更近比較好按,而且 GNU Screen(tmux 的前輩)用的就是 Ctrl + a。如果你想改的話,在 ~/.tmux.conf 加入:

# 把 Prefix 改成 Ctrl + a
set -g prefix C-a
unbind C-b
bind C-a send-prefix

需要注意的是,Ctrl + a 在終端機裡面原本的功能是「跳到行首」,改成 Prefix 之後這個功能就會被覆蓋。如果你常用行首跳轉,可以考慮維持預設的 Ctrl + b 就好。

tmux 外掛管理(TPM)

tmux 有一個外掛管理工具叫做 TPM(Tmux Plugin Manager),可以方便地安裝和管理各種外掛。

安裝 TPM

# 下載 TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

然後在 ~/.tmux.conf 最下方加入:

# TPM 外掛管理
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# 在這裡加入其他外掛...

# 初始化 TPM(這行要放在 .tmux.conf 的最後面)
run '~/.tmux/plugins/tpm/tpm'

載入設定後,在 tmux 裡面按 Prefix + I(大寫 I)就會自動安裝所有設定的外掛。

推薦外掛

tmux-resurrect:讓你可以儲存和還原 tmux 的 Session 狀態。平常 tmux server 關掉(例如重開機)之後,所有 Session 就會消失。裝了 tmux-resurrect 之後,可以按 Prefix + Ctrl + s 儲存目前的所有 Session、Window、Pane 配置,按 Prefix + Ctrl + r 還原。

# 在 ~/.tmux.conf 加入
set -g @plugin 'tmux-plugins/tmux-resurrect'

tmux-continuum:搭配 tmux-resurrect 使用,會自動定期儲存 Session 狀態,不用手動按快捷鍵。還可以設定 tmux server 啟動時自動還原上次的 Session。

# 在 ~/.tmux.conf 加入
set -g @plugin 'tmux-plugins/tmux-continuum'

# 啟動 tmux 時自動還原
set -g @continuum-restore 'on'

tmux-yank:改善 tmux 的複製功能,讓 copy mode 裡面複製的內容可以直接進入系統剪貼簿,不用再另外處理。

# 在 ~/.tmux.conf 加入
set -g @plugin 'tmux-plugins/tmux-yank'

常見問題

tmux 和 screen 有什麼不同?

GNU Screen 是比較早期的終端機多工器,tmux 是後來出現的替代方案。tmux 的分割畫面功能更好用、設定更靈活、有外掛生態系、而且目前社群更活躍。如果你是新手,直接學 tmux 就好。

怎麼在 tmux 中複製文字?

有兩種方式。第一種是用 tmux 的 copy mode:按 Prefix + [ 進入 copy mode,用方向鍵或 Page Up/Down 移動到想要複製的位置,按 Space 開始選取,選好後按 Enter 複製。如果有裝 tmux-yank 外掛,複製的內容會直接進入系統剪貼簿。第二種是使用終端機原生的選取:在 Linux 上按住 Shift 再拖曳選取,在 macOS 上按住 Option(⌥)再拖曳選取。

Prefix key 按了沒反應?

常見的原因有幾個:第一,Prefix key 必須先按再放開,然後才按下一個鍵,不是同時按。例如要建立新 Window 是「按 Ctrl + b,放開,再按 c」,不是「按住 Ctrl + b + c」。第二,檢查你的終端機或其他程式是不是攔截了 Ctrl + b。第三,如果你有自訂 Prefix key,確認設定有正確載入。

進入 copy mode 之後怎麼離開?

qEsc 就可以離開 copy mode 回到正常模式。如果你啟用了滑鼠模式,滾輪捲動會自動進入 copy mode,停止捲動後點擊畫面任意位置或按 q 就能離開。