為什么要用 tmux
如果你對 tmux 的疑問還停留在:我可以開多個 terminal 的 tab 啊,為什么要用 tmux 呢?那我只能呵呵了。 tmux 的強大之處在于:
- 可以連接本地或遠程的 sessions
- 強大的 window 和 pane 管理
- 在不同的 session 之間移動 window
- 自動化腳本
基本概念
tmux 這個單詞是 terminal multiplexer 的縮寫。 tmux 可以讓你在一個屏幕中管理多個終端窗口。 先看圖:
session
tmux 是被設計為 cs 結構的。因此當你啟動 tmux 的時候, 實際上你啟動的是 tmux 的 client。
服務端可能也在你的電腦上或者其他服務器上,總之要連接 client 和 server, 就需要一個 session。
一般來說一個 session 對應這一個 project。
window
一個 session 包含多個 window,這里的 window 比較類似一般 terminal 模擬器的 tab。
pane
一個 window 可以被分割為多個 pane,方便同時查看多個進程的狀態。
快捷鍵
tmux 的快捷鍵可以非常靈活地自定義
配置
tmux 的配置文件位于 $HOME/.tmux.conf
(以及一個全局的 /etc/tmux.conf
),和大多數 dotfile 一樣,把配置項寫到這個文件中,啟動 tmux的時候就會自動讀取了。 下面是我會列舉一些常用配置。
前綴
這個是所有快捷鍵的基礎,設定了一個 prefix,系統才能知道你后續的操作是對于 tmux 的。
幾乎所有的快捷鍵都是要先輸入 prefix 的。默認的 prefix 是 C-b 。不過這和 emacs 的 back 沖突了。
網上比較主流的設定是 C-a,一來這兩個鍵很近,二來雖然這和 emacs 的回到行首沖突,不過相對于 C-b, C-a 多按幾次也沒有副作用,并且用的頻率沒那么高,所以大多數人都會選擇用 C-a 作為 prefix。
當然,也有人覺得 C-t (t for tmux)是一個不錯的選擇,anyway,把 prefix 當成一個變量即可。
配置項:
set -g prefix C-a # 設定前綴
unbind C-b # 取消默認的前綴
set -s escape-time 1 # 設定前綴的作用時間
bind C-a send-prefix # 確保可以在其他應用中可以發送 Ctrl-A
常用操作
這里列出的快捷鍵都是按照上面的配置配好之后的結果。
其中有些操縱是默認值所以并沒出現在配置 list 中。
使用 prefix - ?
可以隨時查看快捷鍵列表。
session
配置項:
bind C-c new-session # 創建新的 session
bind C-f command-prompt -p find-session 'switch-client -t %%' # 查找 session
說明:
功能 | 快捷鍵 |
---|---|
新建 session | prefix - C-c |
返回 session | tmux attach -t session-name |
列出 sessions | tmux list-sessions |
查找 session | prefix - C-f |
重命名 session | tmux rename-seesion session-name |
切換 session | tmux switch -t session-name |
window
配置項:
bind -r C-h previous-window # 選定上一個 window
bind -r C-l next-window # 選定下一個 window
功能 | 快捷鍵 |
---|---|
新建 window | prefix-c |
關閉 window | prefix-& |
重命名 window | prefix-, |
列出 windows | prefix-w |
切換 window | prefix-\[0-9\] |
panel
配置項:
bind - splitw -v # 分割成上下兩個窗口
bind | splitw -h # 分割成左右兩個窗口
功能 | 快捷鍵 |
---|---|
橫向切分 window | prefix - 豎杠 |
縱向切分 window | prefix - 橫杠 |
最大化 pane | prefix-z |
改變 pane 的 layout | prefix-space |
調整 pane 尺寸 | prefix 然后按住(shift)FBNP |
切換 pane(順序跳轉) | prefix - o |
切換 pane(選擇編號) | prefix - q 然后按對應的編號 |
模式
正如 vi 有不同的模式一樣,tmux 也有自己的模式:
default mode
默認模式,就是我們一直在操作的模式。
copy mode
快捷鍵 prefix-[
就會進入 copy mode。在這個模式下,你可以查看歷史記錄,復制粘貼內容,類似于 vi 的 normal mode。
command mode
類似于在 emacs 下直接輸入指令。一些復雜或冷門的操作可以在這里直接調用。
clock mode
快捷鍵 prefix-t
, 會顯示一個時鐘。。。這真的不是一個彩蛋嗎。。。 想要把
prefix 設置成 t 的同學不需要擔心覆蓋掉這個模式了,這模式壓根就沒用啊。。。
高階技巧(插件)
結對編程
如果在結對編程時兩個腦袋湊在一個屏幕前是不是有點擠啊。。。 有了 tmux 就不怕啦。只需要一個 server 端,然后兩個 client 一起連上去。
不但可以共享『屏幕』,還能一起操作同一個文件。 這樣的 common pattern 已經有人封裝好了工具了,就是這個 -- wemux。 不但可以選擇共享模式(mirror,pair,rogue)。還可以踢人哦。。。
初始化工作區
什么?!這個項目需要開啟兩個 redis 端口,一個 rails server,一個 sidekiq 進程。 這還是沒包括 mysql 和 es 這樣的常用服務,以及 guard 這樣的可選工具的情況下。
別怕,有了 tmux,一切都是這么簡單:
試試這個插件吧 -- 叫做 tmuxinator
的一個 ruby gem。 跟著 README 操作一下吧,非常容易入門的。