Tmux has forever changed the way I write code — Tmux 徹底改變了我的寫程式方式

這部影片由 Dreams of Code 頻道製作,介紹了終端多工器 tmux 的強大功能與配置方法。作者分享了他如何從 IDE 使用者轉變為以 tmux + Neovim 為核心的開發工作流,並逐步示範如何將 tmux 從預設的簡陋外觀,打造成現代、美觀且高效的終端環境。


原影片連結:https://www.youtube.com/watch?v=DzNmUNvnB04

影片重點

  • tmux 是終端多工器,能管理多個 session、window 和 pane
  • 使用 TPM(Tmux Plugin Manager)管理 tmux 外掛套件
  • tmux-sensible 套件可修正 tmux 的預設行為怪癖
  • vim-tmux-navigator 實現 tmux 與 Neovim 之間的無縫切換
  • 將 prefix key 從預設的 Ctrl+B 改為 Ctrl+Space 更實用
  • 使用 Catppuccin 主題取代預設的綠色狀態列
  • 啟用滑鼠支援讓操作更直覺
  • window 和 pane 的索引從 1 開始比從 0 開始更符合人體工學
  • tmux-yank 搭配 Vim 風格按鍵綁定改善複製體驗
  • 新分割的 pane 預設開啟在當前目錄更實用

詳細內容

[00:00] 為什麼 tmux 如此重要

作者開門見山地說,tmux 是對他寫程式方式影響最大的一款軟體。在發現 tmux 之前,他主要使用 IDE 和圖形編輯器,只在需要時才進入終端。但自從開始使用 tmux,他的預設編輯器變成了 Vim(Neovim),並且能在終端中享受 tiling window manager 的所有好處。

tmux 提供了幾個他離不開的核心功能:建立和管理多個終端 window、將 window 分割成多個 pane、防止工作階段因終端意外關閉而遺失,以及透過 SSH 連線到另一台電腦並重新接上之前的 tmux session(他稱之為「床上寫程式」的最佳搭檔)。

[01:28] 安裝前置準備

開始配置之前需要安裝兩樣東西:tmux 本身(影片錄製時最新版本是 3.3a)和 TPM(Tmux Plugin Manager)。TPM 透過 git clone 安裝到 ~/.tmux/plugins/tpm 目錄。

接著建立 tmux 設定檔。作者建議使用 XDG config 路徑 ~/.config/tmux/tmux.conf,這是比較現代的 dotfile 管理方式。在設定檔中加入載入 TPM 的程式碼,同時安裝 tmux-sensible 套件——這個套件會修正 tmux 一些預設行為上的怪癖。

[02:43] tmux 基本概念:Session、Window、Pane

tmux 的架構由三個主要物件組成:

Session 是最上層的單位,包含一個或多個 window。你可以同時開啟任意數量的 session,但通常只會 attach 到其中一個。

Window 是一個或多個 pane 的容器,可以把它想像成瀏覽器的分頁。Session 底部的狀態列會顯示所有 window,當前 window 以星號標記。

Pane 是 window 中的分割區域,代表一個獨立的終端。同一時間只有一個 pane 處於 active 狀態。

[03:30] 基本按鍵操作

所有 tmux 命令都需要先按 prefix key(預設是 Ctrl+B),然後再按對應的按鍵:

Window 操作:

  • prefix + c:建立新 window
  • prefix + 數字:切換到指定 window
  • prefix + n/p:切換到下一個/上一個 window
  • prefix + &:關閉 window

Pane 操作:

  • prefix + %:水平分割
  • prefix + ":垂直分割
  • prefix + 方向鍵:在 pane 之間導航
  • prefix + {/}:交換 pane 位置
  • prefix + q:顯示 pane 編號
  • prefix + z:放大/縮小當前 pane
  • prefix + !:將 pane 獨立成 window
  • prefix + x:關閉 pane

Session 操作:

  • tmux:建立新 session
  • tmux new -s 名稱:建立具名 session
  • tmux ls:列出所有 session
  • prefix + s:在 tmux 內列出 session
  • prefix + w:預覽所有 session 的 window
  • tmux attach -t 名稱:附加到指定 session

[06:32] 配置 Vim-Tmux Navigator

安裝完 TPM 後,作者首先推薦的套件是 vim-tmux-navigator。這個套件提供兩個功能:

第一,使用 Ctrl+h/j/k/l 在 tmux pane 之間導航,與 Vim 的方向鍵一致。第二,同時在 Neovim 中安裝對應的外掛後,可以實現 tmux 和 Neovim 之間的無縫切換——用同一組按鍵就能在 Neovim 的 split 和 tmux 的 pane 之間自由移動,讓兩者彷彿是同一個應用程式。

作者使用 NvChad 作為 Neovim 配置,需要額外覆寫一些按鍵綁定來避免衝突。此外,他還加入了 Shift+Alt+H/L 來快速在 window 之間切換。

[08:14] 修正 tmux 的顏色問題

在 tmux session 中,Neovim 的 Catppuccin 主題顏色可能會與終端外的不一致。解決方法是在 tmux 設定中加入 24-bit color 支援的設定行,讓顏色在 tmux 內外保持一致。

[08:45] 更改 Prefix Key

預設的 Ctrl+B prefix 在終端中經常與其他功能衝突。作者推薦改成 Ctrl+Space,只需在設定檔中加入三行設定即可完成更改。

[09:12] 安裝 Catppuccin 主題

預設的 tmux 狀態列是一條「醜陋的綠線」。作者最喜歡的配色方案 Catppuccin 也提供了 tmux 外掛,透過 TPM 即可安裝。預設使用 Mocha 風格,也可以切換為 Latte(淺色)等其他變體。

作者還提到他有自己 fork 的版本,因為官方套件在 window tab 上只顯示目錄名稱,而他偏好顯示更多資訊。

[10:03] 啟用滑鼠支援

加入一行設定即可啟用滑鼠支援。啟用後可以用滑鼠點擊切換 window 或 pane,也能用滾輪瀏覽 buffer 歷史記錄。

[10:18] Window 和 Pane 索引從 1 開始

預設的 tmux 從 0 開始索引 window,但鍵盤上 0 在最右邊,導航時很不直覺。設定 base-index 1pane-base-index 1 可以讓索引從 1 開始,提供更好的使用體驗。

[10:40] 安裝 tmux-yank 複製套件

tmux-yank 讓你可以在 tmux 中使用 y 鍵複製文字。進入 copy mode 的方式是按 prefix + [,然後用 Vim 導航鍵移動游標。

作者覺得預設的選取方式(Ctrl+VSpace)不夠直覺,因此重新綁定為更像 Vim 的操作方式:按 v 開始選取,y 複製,Ctrl+v 切換矩形/行選取模式。

[12:00] 新 Pane 開啟在當前目錄

最後一個配置是讓新分割的 pane 自動開啟在當前工作目錄。作者發現在大多數情況下,他需要在新 pane 中繼續在同一個目錄下工作,而從目標目錄回到 home 目錄比反過來容易得多。透過重新綁定水平和垂直分割的按鍵,加入 pane_current_path 參數即可實現。

我的想法

tmux 作為終端多工器的地位至今無可撼動,這部影片的配置指南即使過了幾年依然非常實用。值得注意的是,vim-tmux-navigator 這個套件解決了一個很多人在 tmux + Neovim 工作流中遇到的痛點——pane 導航的割裂感。一旦設定好,tmux 和 Neovim 的邊界幾乎消失,這正是讓很多開發者願意從 IDE 轉向終端工作流的關鍵因素。

對於目前大量使用 AI 輔助開發(如 Claude Code)的開發者來說,tmux 的 session 持久化功能更是不可或缺——你可以在一個 pane 跑 Claude Code,另一個 pane 看程式碼,再一個 pane 跑測試,即使 SSH 斷線也不會丟失任何工作進度。建議初學者先把 prefix key 改成 Ctrl+Space 和安裝 Catppuccin 主題作為起點,體驗到視覺上的提升後,再逐步加入其他配置會更有動力持續使用。

進階測驗:Tmux 配置與實戰應用

測驗目標:驗證你是否能在實際情境中應用 tmux 的配置與操作知識。
共 5 題,包含情境題與錯誤診斷題。

1. 你正在用 Neovim 編輯程式碼,想要快速切換到右邊的 tmux pane 查看測試輸出。你已經安裝了 vim-tmux-navigator 套件。最佳的操作方式是什麼? 情境題

目前狀態: ┌──────────────────┬──────────────────┐ │ │ │ │ Neovim (編輯) │ Terminal (測試) │ │ ← 你在這裡 │ │ │ │ │ └──────────────────┴──────────────────┘
  • A. 按 Ctrl+B 再按右方向鍵
  • B. 直接按 Ctrl+L
  • C. 先按 Esc 退出 Neovim,再用 tmux 切換
  • D. 按 Ctrl+Space 再按右方向鍵

2. 你在 tmux 中開啟了多個 window,想要快速跳到第一個 window。你已經按照影片建議設定了 base-index 1。應該怎麼操作? 情境題

目前 tmux 狀態列: 1:nvim 2:server 3:logs* 4:tests (你目前在 window 3)
  • A. 按 prefix + 1
  • B. 按 prefix + 0
  • C. 連按兩次 prefix + p
  • D. 按 prefix + n 循環到第一個

3. 你正在遠端伺服器上用 SSH 工作,需要同時監控日誌、編輯設定檔和執行命令。突然網路斷線了。重新連線後,你應該怎麼恢復之前的工作環境? 情境題

$ ssh server.example.com # 已重新連線到伺服器
  • A. 重新開啟所有需要的程式,手動還原工作環境
  • B. 執行 tmux new 建立新 session
  • C. 執行 tmux attach 接回之前的 session
  • D. 執行 tmux ls 然後 tmux new -s work

4. 小明按照教學安裝了 Catppuccin 主題,但發現 Neovim 在 tmux 內的顏色看起來很奇怪,和直接在終端開啟時不一樣。最可能的原因是什麼? 錯誤診斷

# tmux.conf 目前內容(節錄) set -g @plugin ‘catppuccin/tmux’ set -g @catppuccin_flavour ‘mocha’ set -g mouse on set -g base-index 1 # 問題:Neovim 在 tmux 內顏色失真
  • A. Catppuccin 外掛版本過舊需要更新
  • B. 缺少 24-bit color 設定,tmux 沒有正確傳遞色彩資訊
  • C. Neovim 的 Catppuccin 外掛和 tmux 的版本衝突
  • D. 需要將 set -g mouse on 改為 set -g mouse off

5. 小華設定了 tmux 的複製功能,但在 copy mode 中按 v 鍵沒有反應,無法開始選取文字。以下是她的設定檔片段,問題出在哪裡? 錯誤診斷

# tmux.conf(節錄) set -g @plugin ‘tmux-plugins/tmux-yank’ # 複製模式設定 set-window-option -g mode-keys vi bind-key -T copy-mode vi v send-keys -X begin-selection bind-key -T copy-mode vi y send-keys -X copy-selection
  • A. copy mode 名稱寫錯了,應該是 copy-mode-vi 而不是 copy-mode
  • B. 缺少 tmux-yank 套件的安裝步驟,需要先按 prefix + I
  • C. mode-keys vi 應該改為 mode-keys emacs
  • D. 需要先用 prefix + [ 進入 copy mode 才能使用
0

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *