如果說有什么工具可以用相見恨晚 來形容的話,Tmux 算一個。
Tmuxs 是一款優秀的終端復用工具,使用它最直觀的好處就是,通過一個終端登錄遠程主機並運行tmux后,在其中可以開啟多個控制台而無需再“浪費”多余的終端來連接這台遠程主機;
功能
- 提供了強勁的、易於使用的命令行界面。
- 可橫向和縱向分割窗口。
- 窗格可以自由移動和調整大小,或直接利用四個預設布局之一。
- 支持 UTF-8 編碼及 256 色終端。
- 可在多個緩沖區進行復制和粘貼。
- 可通過交互式菜單來選擇窗口、會話及客戶端。
- 支持跨窗口搜索。
- 支持自動及手動鎖定窗口。
- 可以自由配置綁定快捷鍵。
Tmux 重要概念
使用 Tmux 的時候千萬不要去背指令,所有的指令都可以在 .tmux.conf
配置文件中綁定自己順手的快捷鍵,也可以配置開啟鼠標。
這個是我的配置文件:https://github.com/zuorn/tmux.conf
在Tmux邏輯中,需要分清楚Server > Session > Window > Pane這個大小和層級順序是極其重要的,直接關系到工作效率:
- Server:是整個tmux的后台服務。有時候更改配置不生效,就要使用tmux kill-server來重啟tmux。
- Session:是tmux的所有會話。我之前就錯把這個session當成窗口用,造成了很多不便里。一般只要保存一個session就足夠了。
- Window:相當於一個工作區,包含很多分屏,可以針對每種任務分一個Window。如下載一個Window,編程一個window。
- Pane:是在Window里面的小分屏。最常用也最好用
了解了這個邏輯后,整個Tmux的使用和配置也就清晰了。
(ps:下面這種方便好看的Status bar狀態欄,顯示的是windows,而不是sessions)
安裝
在 Mac OS 中,通過 brew 安裝
brew install tmux
ubuntu版本下直接apt-get安裝
sudo apt-get install tmux
centos7版本下直接yum安裝
yum install -y tmux
```sh
centos6版本需要編譯安裝
```sh
yum install libevent libevent-devel ncurses-devel
tar -zvxf tmux-2.3.tar.gz # (提前下載:wget https://github.com/tmux/tmux/releases/download/2.3/tmux-2.3.tar.gz)
cd tmux-2.3
./configure
make && make install
Tmux 常用命令
#啟動新session:
$ tmux [new -s 會話名 -n 窗口名]
#恢復session:
$ tmux at [-t 會話名]
#列出所有sessions:
$ tmux ls
#關閉session:
$ tmux kill-session -t 會話名
#關閉整個tmux服務器:
$ tmux kill-server
Tmux 常用內部命令
所謂內部命令,就是進入Tmux后,並按下前綴鍵后的命令,一般前綴鍵為Ctrl+b. 雖然ctrl和b離得很遠但是不建議改前綴鍵,因為別的鍵也不見得方便好記不沖突。還是記憶默認的比較可靠。
系統指令:
前綴 | 指令 | 描述 |
---|---|---|
Ctrl+b | ? | 顯示快捷鍵幫助文檔 |
Ctrl+b | d | 斷開當前會話 |
Ctrl+b | D | 選擇要斷開的會話 |
Ctrl+b | Ctrl+z | 掛起當前會話 |
Ctrl+b | r | 強制重載當前會話 |
Ctrl+b | s | 顯示會話列表用於選擇並切換 |
Ctrl+b | : | 進入命令行模式,此時可直接輸入ls等命令 |
Ctrl+b | [ | 進入復制模式,按q退出 |
Ctrl+b | ] | 粘貼復制模式中復制的文本 |
Ctrl+b | ~ | 列出提示信息緩存 |
窗口(window)指令:
前綴 | 指令 | 描述 |
---|---|---|
Ctrl+b | c | 新建窗口 |
Ctrl+b | & | 關閉當前窗口 |
Ctrl+b | 0~9 | 切換到指定窗口 |
Ctrl+b | p | 切換到上一窗口 |
Ctrl+b | n | 切換到下一窗口 |
Ctrl+b | w | 打開窗口列表,用於且切換窗口 |
Ctrl+b | , | 重命名當前窗口 |
Ctrl+b | . | 修改當前窗口編號(適用於窗口重新排序) |
Ctrl+b | f | 快速定位到窗口(輸入關鍵字匹配窗口名稱) |
面板(pane)指令:
前綴 | 指令 | 描述 |
---|---|---|
Ctrl+b | " | 當前面板上下一分為二,下側新建面板 |
Ctrl+b | % | 當前面板左右一分為二,右側新建面板 |
Ctrl+b | x | 關閉當前面板(關閉前需輸入y or n確認) |
Ctrl+b | z | 最大化當前面板,再重復一次按鍵后恢復正常(v1.8版本新增) |
Ctrl+b | ! | 將當前面板移動到新的窗口打開(原窗口中存在兩個及以上面板有效) |
Ctrl+b | ; | 切換到最后一次使用的面板 |
Ctrl+b | q | 顯示面板編號,在編號消失前輸入對應的數字可切換到相應的面板 |
Ctrl+b | { | 向前置換當前面板 |
Ctrl+b | } | 向后置換當前面板 |
Ctrl+b | Ctrl+o | 順時針旋轉當前窗口中的所有面板 |
Ctrl+b | 方向鍵 | 移動光標切換面板 |
Ctrl+b | o | 選擇下一面板 |
Ctrl+b | 空格鍵 | 在自帶的面板布局中循環切換 |
Ctrl+b | Alt+方向鍵 | 以5個單元格為單位調整當前面板邊緣 |
Ctrl+b | Ctrl+方向鍵 | 以1個單元格為單位調整當前面板邊緣(Mac下 |
Ctrl+b | t | 顯示時鍾 |
我的配置文件
使用
$ git clone git@github.com:zuorn/tmux-config.git
$ cp tmux-config/.tmux.conf ~/.tmux.conf
重啟 tmux restart tmux
或者 在 tmux 窗口中,先按下 Ctrl+b
指令前綴,然后按下系統指令:,進入到命令模式后輸入 source-file ~/.tmux.conf
,回車后生效。
配置項
修改指令前綴
可根據自己的喜好來設置,如若要啟用,取消注釋即可。
#set -g prefix C-f #
#unbind C-f # C-b 即 Ctrl+b 鍵,unbind 意味着解除綁定
#bind C-f send-prefix # 綁定 Ctrl+f 為新的指令前綴
# 從tmux v1.6版起,支持設置第二個指令前綴
#set-option -g prefix2 ` # 設置一個不常用的`鍵作為指令前綴,按鍵更快些
添加加載配置文件快捷指令 r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."
支持鼠標
- 選取文本
- 調整面板大小
- 選中並切換面板
# 老版本:
#setw -g mode-mouse on # 支持鼠標選取文本等
#setw -g mouse-resize-pane on # 支持鼠標拖動調整面板的大小(通過拖動面板間的分割線)
#setw -g mouse-select-pane on # 支持鼠標選中並切換面板
#setw -g mouse-select-window on # 支持鼠標選中並切換窗口(通過點擊狀態欄窗口名稱)
# v2.1及以上的版本
set-option -g mouse on
面板
更改新增面板鍵
-
- 垂直新增面板
-
- 水平新增面板
unbind '"'
bind - splitw -v -c '#{pane_current_path}' # 垂直方向新增面板,默認進入當前目錄
unbind %
bind = splitw -h -c '#{pane_current_path}' # 水平方向新增面板,默認進入當前目錄
面板調整大小
綁定Ctrl+hjkl鍵為面板上下左右調整邊緣的快捷指令
bind -r ^k resizep -U 10 # 綁定Ctrl+k為往↑調整面板邊緣10個單元格
bind -r ^j resizep -D 10 # 綁定Ctrl+j為往↓調整面板邊緣10個單元格
bind -r ^h resizep -L 10 # 綁定Ctrl+h為往←調整面板邊緣10個單元格
bind -r ^l resizep -R 10 # 綁定Ctrl+l為往→調整面板邊緣10個單元格
復制模式
復制模式更改為 vi 風格
setw -g mode-keys vi # 開啟vi風格后,支持vi的C-d、C-u、hjkl等快捷鍵
復制模式向 vi 靠攏
- v 開始選擇文本
- y 復制選中文本
- p 粘貼文本
bind -t vi-copy v begin-selection # 綁定v鍵為開始選擇文本
bind -t vi-copy y copy-selection # 綁定y鍵為復制選中文本
bind p pasteb # 綁定p鍵為粘貼文本(p鍵默認用於進入上一個窗口,不建議覆蓋)
優化
設置窗口面板起始序號
set -g base-index 1 # 設置窗口的起始下標為1
set -g pane-base-index 1 # 設置面板的起始下標為1
自定義狀態欄
set -g status-utf8 on # 狀態欄支持utf8
set -g status-interval 1 # 狀態欄刷新時間
set -g status-justify left # 狀態欄列表左對齊
setw -g monitor-activity on # 非當前窗口有內容更新時在狀態欄通知
set -wg window-status-format " #I #W " # 狀態欄窗口名稱格式
set -wg window-status-current-format " #I:#W#F " # 狀態欄當前窗口名稱格式(#I:序號,#w:窗口名稱,#F:間隔符)
set -wg window-status-separator "" # 狀態欄窗口名稱之間的間隔
Tmux 常見問題
Tmux不管怎么改配置文件,都不產生變化
這個主要是由於Tmux的后台緩存機制造成的。我就犯了個大錯誤:甚至刪了Tmux、重裝Tmux、重啟電腦,都沒達成。
Tmux會有一個叫Tmux-server的東西。只要把它kill,重啟tmux就OK了:
tmux kill-server -a