從0開始的 Tmux 教學 (二)

Tmux Series Story 2

Lau Dai He
9 min readJan 3, 2021

Author:Lau Dai

Date:2020/12/22

前言

時隔超過一年,從學生的身份到現在也工作一年多了,在夜晚提筆的時刻,都會默默感慨時光的飛逝,工作後最大的心願不求大富大貴,只求朋友、家人都可以平安、健康

2020/12/22 Lau Dai 謹記。

正文開始

在本章節中,將分成兩大區塊講解:

  1. 為什麼要使用tmux、如何選擇tmux版本,以及如何安裝tmux。
  2. tmux 使用的起手式,觀念介紹與常用快捷鍵。

第一節:為什麼要使用 tmux、如何安裝 tmux

為什麼要使用 tmux

在此系列第一篇文章中提到 tmux 的種種特點,如可以將程式放在 tmux 中執行、可同步分享 terminal畫面,雖然很好用,但你不應該把它拿來當成服務 (daemon)運作,充其量只能算是背景程式 (background process)。

使用案例說明:

⭕ 當你想要同步展示 terminal 畫面

⭕ 當你開發程式時,想要同步多個視窗做比較

⭕ 簡單測試 ELK Stack docker compose

❌ 運行服務程式,如 ELK Stack

如何選擇 tmux 版本

至於版本選擇,基本上就是安裝套件庫內最新的就可以。筆者從四年前的 1.9 到現在 3.0a,使用時間最久的版本是 2.5。版本升級可能帶來新功能,也有可能會因為版本升級而造成原本舊有 config 語法錯誤,目前遇到問題上 stackoverflow 都可以得到解答,因此當有穩定新版本釋出後,直接更新並沒有什麼問題,若想要嘗試最新 tmux 版本,可以自行編譯來嘗試看看。

如何安裝 tmux

此教學示範是使用 docker來建制環境,透過 docker container 可以使用最乾淨的環境,以及保證環境一致性,linux distribution 採用筆者熟悉的 Ubuntu,讀者練習時可以使用自己習慣的環境即可。

Windows 使用者可以使用 Cygwin或 WSL 來進行安裝測試。筆者在此私心推薦使用 WSL 搭配 terminal,可以讓你的視窗看起來比較順眼。

在此範例中,使用兩種方式進 tmux 安裝

方式一:自己編譯

示範環境:Docker image Ubuntu:20.04 image file

  1. 安裝 Dependencies
# 下載檔案使用
apt install git wget -y
# 編譯libevent openssl需要
apt install libssl-dev -y
apt install gcc make pkg-config bison -y

2.編譯與安裝 Dependencies ncurses

wget https://invisible-mirror.net/archives/ncurses/ncurses-6.2.tar.gztar zxvf ncurses-6.2.tar.gzcd ncurses-6.2; ls $1./configuremakemake install

3. 編譯與安裝 Dependencies libevent

wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gztar zxvf libevent-2.1.12-stable.tar.gzcd libevent-2.1.12-stable ; ls $1./configuremakemake installln -s /usr/local/lib/libevent-2.1.so.7.0.1 /usr/lib/libevent-2.1.so.7

4.編譯與安裝tmux

git clone https://github.com/tmux/tmux.gitcd tmux#修復 aclocal failed
apt install automake
sh autogen.sh./configure && make./tmux -V
# tmux next-3.3

方式二:透過 apt 安裝

apt install tmuxtmux -V# tmux 3.0a
兩種不同方式安裝的 tmux 版本

自行編譯有著很大的自由度,礙於筆者對於 make 相關操作並不熟悉,因此不多做介紹。而透過如 apt 等套件管理工具安裝應該不會有什麼問題,缺少的相依套件都會自動補其,安裝正常後,即可使用。

第二節:tmux 起手式,觀念介紹與常用快捷鍵

觀念介紹

在此系列第一篇文章中提到 tmux 的三個概念,分別為 Session, Window以及Pane,可以用階層的方式去想像這三者關係。

  • Session :一台電腦內可以有多個 Session
  • Window:一個 Session 內可以有多個 Window
  • Pane:一個 Window 內可以有多個 Pane

當你在視窗中輸入 tmux 後,實質上你是建立了一個 Session,其預設 Window index為 0,Pane index 為 0。

若在編寫 script中,其代號為 {Session}:{Window}.{Pane}

Session、Window、Pane 這三者分別都可以進行重新命名、修改 index、交換 index 等操作,亦可在不同 Session 中透過 Window 名稱進行查找切換,甚至可以將 Pane 移到其他 Window、Session,可說是靈活度很高。

常用快捷鍵

在了解基本原理與用途後,在這裡介紹常見的使用快捷鍵,依照快捷鍵類別分類,當你熟悉這些常用項目後,便可建立你 tmux 工作流程。

組合鍵說明(keybindings):

< Prefix > : 預設是Ctrl-b

Meta (M) : 預設是 Alt 鍵

Shift (S) : 就是 Shift 鍵

在上述按鍵中,基本上你比較容易會用到的只有 <Prefix>,後續的兩組按鍵等讀者會編寫 tmux config 的時候就會更常用到了。
  1. Session 操作
  • 新增 Session : $tmux new
  • 暫時離開 Session <Prefix> d
  • 連接 Session $tmux a

2. Window 操作

  • 上一個 / 下一個 Window <Prefix> p / <Prefix> n
  • 回到最後一次訪問 Window <Prefix> l
  • 切換到 index 相對應的 Window <Prefix> 0~9

3. Pane 操作

  • 水平切割 Pane / 垂直切割 Pane <Prefix> " / <Prefix> %
  • 在 Pane 之間移動(Prefix按一次即可) <Prefix> ↑↓←→
  • 回到最後一次訪問 Pane <Prefix> ;
  • 將 Pane 放到最大/恢復原樣 <Prefix> z
水平/垂直切割 Pane
Pane 移動與縮放

4. 列出資訊

  • 列出 Pane 編號 <Prefix> q
  • 列出此 Window 資訊 <Prefix> i
  • 列出所有快捷鍵(keybindings) <Prefix> ?

5. 切換 tmux

  • 以樹狀方式選取 Session <Prefix> s
  • 以樹狀方式選取 Window <Prefix> w
  • 透過 Window 名稱選擇 Window <Prefix> f {window name}

6. 其他雜項 (Misc)

  • 使用命令列方式修改 Session 名稱 <Prefix> $
  • 使用命令列方式修改 Window 名稱 <Prefix> ,
  • 使用命令列選擇是否關閉此 Window <Prefix> &
  • 使用命令列選擇是否關閉此 Pane <Prefix> x
  • 將此 Pane 移動至新的 Window <Prefix> !

最後,筆者將所有常用的快捷鍵都整理出來,如果有需要的讀者可以自行clone一份。

https://gist.github.com/laudai/1d084f664e987e50fdceebcdd699261d

英文版快捷鍵(tmux version :3.0a)

後記

此篇終於完成了,在跨年這幾天終於把主要素材完成。從2020/12/22到2021/01/01,也算是某方面的寫了一年吧 XD

這系列文章算是網路上 tmux 教學使用最詳細的,在撰寫此篇章,所使用素材之浩大,使用了ssr, screenkey,又嘗試 gfycat、GIPHY(最後兩者都放棄),在這裡感謝網路上進行各種資訊教學的前輩,在撰寫每篇文章時資料蒐集、校稿、素材製作等都需要許多經歷,當筆者深刻投入後才知道每篇圖文並茂的文章真是得來不易,在此獻上十二萬分敬意。

如果有機會,可能會有番外篇章,主要講解建構你的 workflow,預計會說明如何使用 Vim + Zsh + Tmux + VSCode。(還有其他軟體如 mosh、glances)如果讀者對於文章有任何想交流的,除了拍手 👏 之外,也歡迎留言討論。你們的支持與鼓勵是我創作的最大動力。

1. 介紹基本環境 點我

2. 介紹安裝與基本操作 本篇

3. 如何編寫自己習慣與喜歡的tmux configuration

4. 套件與插件的教學

番外篇.與其他軟體整合應用

--

--

Lau Dai He

Less is more. 2021/08/01起,主要會紀錄各種技術的精華重點文章,方向可能是Pyhton, Linux, WIndows等都有可能。文章內容精簡為主,搭配少部份的個人情感抒發等。(inspired by 路人甲的世界​-知乎作者)