tmux 是一款終端復用命令行工具,一般用于 Terminal 的窗口管理。在 macOS 下评肆,使用 iTerm2 能應付絕大多數(shù)窗口管理的需求。
如上圖所示非区,iTerm2 能新建多個標簽頁(快捷鍵 ?T)瓜挽,也能在同一個窗口中分割出多個窗格(快捷鍵 ?D 或 ??D)。
tmux 相比 iTerm2 的優(yōu)勢在于:
- iTerm2 的窗格切換快捷鍵(??→)容易與其他軟件全局快捷鍵沖突(例如 Spectacle 的窗口分割快捷鍵)征绸,tmux 由于存在前綴快捷鍵久橙,所以不存在快捷鍵沖突問題;
- tmux 可以在終端軟件重啟后通過命令行恢復上次的 session 管怠,而終端軟件則不行淆衷;
- tmux 簡潔優(yōu)雅、訂制性強排惨,學會之后也能在 Linux 上使用吭敢,有助于逼格提升。
接下來我們花十分鐘來掌握下 tmux 的基礎用法:
安裝運行
macOS 上使用 Homebrew 安裝即可:
brew install tmux
安裝完成后暮芭,運行 tmux
新建一個 tmux 的會話(session)鹿驼,此時窗口唯一的變化是在底部會出現(xiàn)一個 tmux 的狀態(tài)欄。我們先按下 tmux 默認的前綴快捷鍵 ?b
將其激活為快捷鍵接收模式辕宏,再按下 %
畜晰,即可將當前窗口切分為左右兩個窗格。
快捷鍵
一般情況下 tmux 中所有的快捷鍵都需要和前綴快捷鍵 ?b
來組合使用(注:? 為 Mac 的 control 鍵)瑞筐,以下是常用的窗格(pane)快捷鍵列表凄鼻,大家可以依次嘗試下:
窗格操作
-
%
左右平分出兩個窗格 -
"
上下平分出兩個窗格 -
x
關閉當前窗格 -
{
當前窗格前移 -
}
當前窗格后移 -
;
選擇上次使用的窗格 -
o
選擇下一個窗格,也可以使用上下左右方向鍵來選擇 -
space
切換窗格布局聚假,tmux 內(nèi)置了五種窗格布局块蚌,也可以通過?1
至?5
來切換 -
z
最大化當前窗格,再次執(zhí)行可恢復原來大小 -
q
顯示所有窗格的序號膘格,在序號出現(xiàn)期間按下對應的數(shù)字峭范,即可跳轉(zhuǎn)至對應的窗格
窗口操作
tmux 除了窗格以外,還有窗口(window) 的概念瘪贱。依次使用以下快捷鍵來熟悉 tmux 的窗口操作:
-
c
新建窗口纱控,此時當前窗口會切換至新窗口,不影響原有窗口的狀態(tài) -
p
切換至上一窗口 -
n
切換至下一窗口 -
w
窗口列表選擇菜秦,注意 macOS 下使用?p
和?n
進行上下選擇 -
&
關閉當前窗口 -
,
重命名窗口甜害,可以使用中文,重命名后能在 tmux 狀態(tài)欄更快速的識別窗口 id -
0
切換至 0 號窗口球昨,使用其他數(shù)字 id 切換至對應窗口 -
f
根據(jù)窗口名搜索選擇窗口尔店,可模糊匹配
會話操作
如果運行了多次 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 的會話河哑,會話默認名稱為數(shù)字
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 提供了一些個性化配置項來優(yōu)化這些配置衷模,首先在 shell 中運行 touch ~/.tmux.conf
新建用戶配置文件鹊汛。在文件中增加以下內(nèi)容:
# 開啟鼠標模式
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 「在選擇時復制」選項疤苹,即可實現(xiàn)自動選擇復制。如下圖:
3蛔添、tips
- screen 是另外一款終端復用命令行痰催,但他沒有 tmux 好看好用;
- tmux 有個 bug 迎瞧,導致從它啟動的 vscode 的復制粘貼快捷鍵會失效夸溶;
- iTerm2 可以通過 「Preferences -> Profiles -> Keyboard Behavior -> Left option key acts as +Esc」將鍵盤的左側(cè) option 鍵映射為 Meta 鍵