十分鐘學會 tmux

tmux 是一款終端復用命令行工具,一般用于 Terminal 的窗口管理。在 macOS 下,使用 iTerm2 能應付絕大多數窗口管理的需求。

iTerm2 的窗口管理

如上圖所示,iTerm2 能新建多個標簽頁(快捷鍵 ?T),也能在同一個窗口中分割出多個窗格(快捷鍵 ?D 或 ??D)。

tmux 相比 iTerm2 的優勢在于:

  • iTerm2 的窗格切換快捷鍵(??→)容易與其他軟件全局快捷鍵沖突(例如 Spectacle 的窗口分割快捷鍵),tmux 由于存在前綴快捷鍵,所以不存在快捷鍵沖突問題;
  • tmux 可以在終端軟件重啟后通過命令行恢復上次的 session ,而終端軟件則不行;
  • tmux 簡潔優雅、訂制性強,學會之后也能在 Linux 上使用,有助于逼格提升。

接下來我們花十分鐘來掌握下 tmux 的基礎用法:

安裝運行

macOS 上使用 Homebrew 安裝即可:

brew install tmux

安裝完成后,運行 tmux 新建一個 tmux 的會話(session),此時窗口唯一的變化是在底部會出現一個 tmux 的狀態欄。我們先按下 tmux 默認的前綴快捷鍵 ?b 將其激活為快捷鍵接收模式,再按下 % ,即可將當前窗口切分為左右兩個窗格。

tmux 窗格

快捷鍵

一般情況下 tmux 中所有的快捷鍵都需要和前綴快捷鍵 ?b 來組合使用(注:? 為 Mac 的 control 鍵),以下是常用的窗格(pane)快捷鍵列表,大家可以依次嘗試下:

窗格操作

  • % 左右平分出兩個窗格
  • " 上下平分出兩個窗格
  • x 關閉當前窗格
  • { 當前窗格前移
  • } 當前窗格后移
  • ; 選擇上次使用的窗格
  • o 選擇下一個窗格,也可以使用上下左右方向鍵來選擇
  • space 切換窗格布局,tmux 內置了五種窗格布局,也可以通過 ?1?5來切換
  • z 最大化當前窗格,再次執行可恢復原來大小
  • q 顯示所有窗格的序號,在序號出現期間按下對應的數字,即可跳轉至對應的窗格

窗口操作

tmux 除了窗格以外,還有窗口(window) 的概念。依次使用以下快捷鍵來熟悉 tmux 的窗口操作:

  • c 新建窗口,此時當前窗口會切換至新窗口,不影響原有窗口的狀態
  • p 切換至上一窗口
  • n 切換至下一窗口
  • w 窗口列表選擇,注意 macOS 下使用 ?p?n 進行上下選擇
  • & 關閉當前窗口
  • , 重命名窗口,可以使用中文,重命名后能在 tmux 狀態欄更快速的識別窗口 id
  • 0 切換至 0 號窗口,使用其他數字 id 切換至對應窗口
  • f 根據窗口名搜索選擇窗口,可模糊匹配
tmux 狀態欄說明

會話操作

如果運行了多次 tmux 命令則會開啟多個 tmux 會話(session)。在 tmux 會話中,使用前綴快捷鍵 ?b 配合以下快捷鍵可操作會話:

  • $ 重命名當前會話
  • s 選擇會話列表
  • d detach 當前會話,運行后將會退出 tmux 進程,返回至 shell 主進程

在 shell 主進程下運行以下命令可以操作 tmux 會話:

tmux new -s foo # 新建名稱為 foo 的會話
tmux ls # 列出所有 tmux 會話
tmux a # 恢復至上一次的會話
tmux a -t foo # 恢復名稱為 foo 的會話,會話默認名稱為數字
tmux kill-session -t foo # 刪除名稱為 foo 的會話
tmux kill-server # 刪除所有的會話

除以上提到的快捷鍵以外,tmux 還有許多其他的快捷鍵和命令,使用前綴快捷鍵 ?b? 可以查看所有的快捷鍵列表,該列表視圖為 tmux copy 模式,該模式下可使用以下快捷鍵(無需加 ?b 前綴):

  • ?v 下一頁
  • Meta v 上一頁 (tmux 快捷鍵為 Emacs 風格,這里的 Meta 鍵可用 Esc 模擬)
  • ?s 向前搜索
  • q 退出 copy 模式

常見配置與問題

1、鼠標滾屏

tmux 默認配置中最糟糕的體驗就是滾屏查看和文本復制(大家可以先試試看)。你需要先使用 ?b [ 快捷鍵進入 copy 模式,然后使用翻頁、字符定位來選擇需要的字符,效率遠沒有鼠標選擇來的快。

因此 tmux 提供了一些個性化配置項來優化這些配置,首先在 shell 中運行 touch ~/.tmux.conf 新建用戶配置文件。在文件中增加以下內容:

# 開啟鼠標模式
set -g mode-mouse on

# 允許鼠標選擇窗格
set -g mouse-select-pane on

# 如果喜歡給窗口自定義命名,那么需要關閉窗口的自動命名
set-option -g allow-rename off

# 如果對 vim 比較熟悉,可以將 copy mode 的快捷鍵換成 vi 模式
set-window-option -g mode-keys vi

配置文件修改完成后,可以 tmux kill-server 重啟所有 tmux 進程,或者在 tmux 會話中使用 ?b : 進入控制臺模式,輸入 source-file ~/.tmux.conf 命令重新加載配置。

2、鼠標復制

tmux 下開啟鼠標滾屏后,復制文本有兩種方式:

  • 方法 1:使用 ?b z 進入窗格全屏模式,鼠標選擇文本的同時按住 option 鍵 ?,然后使用 ?c 進行復制;
  • 方法 2:開啟 iTerm2 「在選擇時復制」選項,即可實現自動選擇復制。如下圖:
iTerm2 配置在選擇時復制

3、tips

  • screen 是另外一款終端復用命令行,但他沒有 tmux 好看好用;
  • tmux 有個 bug ,導致從它啟動的 vscode 的復制粘貼快捷鍵會失效;
  • iTerm2 可以通過 「Preferences -> Profiles -> Keyboard Behavior -> Left option key acts as +Esc」將鍵盤的左側 option 鍵映射為 Meta 鍵

另外,最近看到兩篇不錯的 awksed 命令入門,感興趣的同學可以自己看一下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • iTerm2 已經整合了 tmux,這意味著什么? 通常情況下,當你使用 tmux 的時候,會在一個「物理」窗口(...
    悅華閱讀 23,205評論 1 14
  • 引子 SSH連接是我們與服務器交互的主要手段,每個程序員每天都會用到,就像喝白開水一樣普通。就是這樣一個簡單而又高...
    bluexiii閱讀 12,612評論 0 8
  • title: Tmuxdate: 2016-05-27 20:48:52tags: kali系統配置 0x00 什...
    曼路x_x閱讀 1,163評論 0 0
  • 推送技術哪家強,還是要去找極光,沒有一點打廣告的意思哦!接觸蘋果遠程推送功能不是一天二天了,記得上次也就是前年集成...
    小白哥有話說閱讀 1,427評論 4 15
  • 今天是個好日子,我參加了養老院的活動,內心感覺棒極了。我曾經很多次的問自己為何要去養老院看望老人呢?自己內心深處聽...
    喜水閱讀 538評論 4 2