跳至主要內容

Tmux 終端機多工管理:打造高效開發工作流

Tmux 終端機多工管理:打造高效開發工作流

Tmux(Terminal Multiplexer)讓你在一個終端機視窗中管理多個工作階段,就算 SSH 連線中斷,執行中的程式也不會停止。對於經常需要同時處理多個任務的開發者來說,Tmux 幾乎是必備工具。

安裝

# macOS
brew install tmux

# Ubuntu/Debian
sudo apt install tmux

# 確認版本
tmux -V

核心概念

Tmux 的三層結構:

  • Session(工作階段):最高層,可以有多個 window
  • Window(視窗):類似瀏覽器分頁,每個 session 可有多個
  • Pane(窗格):每個 window 可以分割成多個 pane

基本操作

預設的 prefix key 是 Ctrl+b,所有 tmux 快捷鍵都需要先按 prefix。

# Session 操作
tmux                        # 建立新 session
tmux new -s myproject       # 建立有名稱的 session
tmux ls                     # 列出所有 session
tmux attach -t myproject    # 重新連接到 session
tmux kill-session -t myproject  # 刪除 session

# 在 tmux 內
Ctrl+b d    # detach(離開但不關閉)
Ctrl+b $    # 重新命名 session

Window 操作

Ctrl+b c    # 建立新 window
Ctrl+b ,    # 重新命名 window
Ctrl+b n    # 下一個 window
Ctrl+b p    # 上一個 window
Ctrl+b 0-9  # 切換到指定編號的 window
Ctrl+b w    # 顯示所有 window 列表
Ctrl+b &    # 關閉目前 window

Pane 操作

Ctrl+b %    # 垂直分割(左右)
Ctrl+b "    # 水平分割(上下)
Ctrl+b 方向鍵  # 切換 pane
Ctrl+b z    # 最大化/還原目前 pane
Ctrl+b x    # 關閉目前 pane
Ctrl+b {    # 交換 pane 到前一個位置
Ctrl+b }    # 交換 pane 到下一個位置
Ctrl+b Ctrl+方向鍵  # 調整 pane 大小

自訂 .tmux.conf

# ~/.tmux.conf

# 把 prefix 改成 Ctrl+a(更順手)
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# 用 vim 風格的按鍵切換 pane
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 更直覺的分割快捷鍵
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 保留當前目錄
bind c new-window -c "#{pane_current_path}"

# 滑鼠支援
set -g mouse on

# 增加 history 上限
set -g history-limit 50000

# 減少 ESC 延遲(對 Vim 使用者重要)
set -sg escape-time 0

# 256 色支援
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"

# 狀態列美化
set -g status-style bg=colour235,fg=colour136
set -g status-left ""  
set -g status-right "#{session_name} | %H:%M"
set -g window-status-current-style fg=colour166,bold

# 使用 r 快速 reload 設定
bind r source-file ~/.tmux.conf \; display "設定已重載!"

複製模式(Copy Mode)

Ctrl+b [      # 進入複製模式

# 在複製模式中(預設 emacs 風格)
Ctrl+Space   # 開始選取
Ctrl+w       # 複製選取範圍
Ctrl+b ]     # 貼上

# 使用 vi 風格(推薦)
# 在 .tmux.conf 中加入:
# setw -g mode-keys vi
# 然後可以用 v 開始選取、y 複製

工作場景配置腳本

#!/bin/bash
# dev-session.sh:一鍵建立開發環境

SESSION="myproject"

# 如果 session 已存在就 attach
tmux has-session -t $SESSION 2>/dev/null
if [ $? -eq 0 ]; then
    tmux attach -t $SESSION
    exit 0
fi

# 建立新 session
tmux new-session -d -s $SESSION -n "editor"

# Window 1: 編輯器
tmux send-keys -t $SESSION:0 "cd ~/projects/myapp && nvim" Enter

# Window 2: 開發伺服器(上下分割)
tmux new-window -t $SESSION -n "server"
tmux send-keys -t $SESSION:1 "cd ~/projects/myapp && npm run dev" Enter
tmux split-window -t $SESSION:1 -v
tmux send-keys -t $SESSION:1.1 "cd ~/projects/myapp && npm run db:studio" Enter

# Window 3: Git 和終端機
tmux new-window -t $SESSION -n "terminal"
tmux send-keys -t $SESSION:2 "cd ~/projects/myapp && git log --oneline -10" Enter

# 切換到第一個 window
tmux select-window -t $SESSION:0

tmux attach -t $SESSION

搭配 Tmuxinator

gem install tmuxinator

# 建立專案設定
tmuxinator new myproject
# ~/.config/tmuxinator/myproject.yml
name: myproject
root: ~/projects/myproject

windows:
  - editor:
      layout: main-vertical
      panes:
        - nvim .
        - git status
  - server:
      panes:
        - npm run dev
        - npm run db:studio
  - misc:
      panes:
        - '
tmuxinator start myproject

一旦習慣了 Tmux 的工作流程,你會很難想像沒有它的開發體驗。建議先掌握最基本的操作,再逐步自訂設定,找到最適合自己的工作方式。

分享這篇文章