Tmux Prefix (prefix)
Tmux 使用 Prefix 以將自身的快捷鍵與其它應用區分,運行 Tmux 快捷鍵時首先按下這個 Prefix (默認是 Ctrl-b
組合鍵),松手后緊接着按下對應操作的快捷鍵。
比如,如果我想要列出所有的 Tmux 會話(對應快捷鍵是 s
)需要這樣:
- 按下
Ctrl-b
組合鍵(默認 Prefix ); - 放開
Ctrl-b
; - 按下
s
鍵。
Tmux 配置文件的默認地址是 ~/.tmux.conf
,每次啟動 Tmux 時都會加載該文件。
修改 Prefix( Prefix )
Tmux 的配置未見位置是 ~/.tmux.conf
,修改 Tmux Prefix 首先需要取消綁定原有的的 Prefix ; 再設置新的 Prefix,這里以 Ctrl-w
為例:
unbind C-b
set -g prefix C-w
綁定快捷鍵
Tmux 快捷鍵綁定的命令是 bind 快捷鍵 作用
,即可將“作用”綁定在 Prefix +快捷鍵
上, 下面這行配置會將“重新加載”配置文件的操作綁定在快捷鍵 R
上:
bind R source-file ~/.tmux.conf \; display-message "Config reloaded..."
Tmux 特性
Pane(面板)
如果你用過 Vim 之類的編輯器肯定不會對 Pane 概念感到陌生,Tmux 也支持類似的概念, 支持橫向和縱向切割面板功能。
功能 | 命令 |
---|---|
水平切割(上下兩半) | Prefix + " |
豎直切割(左右) | Prefix + % |
調整面板寬度/高度 | Prefix - 方向鍵 |
窗口(window)
窗口的層級要高於面板,作用類似於標簽頁,默認會在終端的底部顯示窗口列表。
功能 | 命令 |
---|---|
創建新窗口 | Prefix + c |
重命名窗口 | Prefix + , |
切換到某個窗口 | Prefix + 窗口 ID |
會話(session)
會話的層級更高於窗口,在終端輸入 tmux
會創建並進入一個新的會話,你可以使用會話來區分 使用者或者任務。
功能 | 命令 |
---|---|
創建並進入新會話 | tmux |
進入未關閉的會話 | tmux attach 會話名 |
退出但保留當前會話 | Prefix + d |
列出所有會話 | Prefix + s |
重命名當前會話 | Prefix + $ |
類 Vim 的文字選擇和復制方式
選中和復制文字
你需要添加以下配置:
# (進入復制模式后)輸入 'v' 開始選擇
bind-key -t vi-copy v begin-selection
# 將選中文字添加到系統的剪貼板中
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
結對編程
tmux 有個特性,不管多少人連進同一個 tmux 會話,他們看到和操作的都是同一個東西,會話的長寬取決於輸出的長款的最小值,因此可以用來進行結對編程練習。
Tmate 與遠程會話共享
首先你需要安裝 Tmate:
brew install tmate
Ubuntu:
sudo apt-get install software-properties-common && \
sudo add-apt-repository ppa:tmate.io/archive && \
sudo apt-get update && \
sudo apt-get install tmate
輸入 tmate
將會創建一個公開的遠程會話(會話的底部會出現提示“[tmate] Remote session: ssh [some hash]@ny.tmate.io”),將 ssh 的地址發送給你的朋友就可以分享你的會話了!
Vim 兼容問題
主題沖突問題
如果你跟我一樣使用 Vim 作為編輯器,可能同樣會遇到輸出黑塊的問題。解決方案是在 Vim 的配置文件中加入:
if exists('$TMUX')
set term=screen-256color
endif
會話外操作:
tmux new -s <name-of-my-session> 在會話外創建一個新的會話
tmux ls 在會話外獲取會話列表
tmux a(attach) -t <name-of-my-session> 在會話外進入會話,不帶名字進入第一個會話
tmux kill-session -t <name-of-my-session> 在會話外刪除會話
上面的操作是在普通命令行下操作的,所以不用按前綴鍵。下面的都是在tmux中操作的,所以需要按前綴鍵,默認是ctrl-b;在tmux中,輸入冒號是開啟命令行。
基本操作:
? 列出所有快捷鍵;按q返回
d 脫離當前會話,可暫時返回Shell界面,輸入tmux attach能夠重新進入之前會話
s 選擇並切換會話;在同時開啟了多個會話時使用
D 選擇要脫離的會話;在同時開啟了多個會話時使用
: 進入命令行模式;此時可輸入支持的命令,例如kill-server所有tmux會話
[ 復制模式,光標移動到復制內容位置,空格鍵開始,方向鍵選擇復制,回車確認,q/Esc退出
] 進入粘貼模式,粘貼之前復制的內容,按q/Esc退出
~ 列出提示信息緩存;其中包含了之前tmux返回的各種提示信息
t 顯示當前的時間
會話操作:
:new -s <name-of-my-new-session> 進入會話后創建新的會話
s 列出會話,進行選擇
:kill-session 刪除當前會話
:kill-server 刪除所有會話
窗口操作:
c 創建新窗口
& 關閉當前窗口
數字鍵 切換到指定窗口
p 切換至上一窗口
n 切換至下一窗口
l 前后窗口間互相切換
w 通過窗口列表切換窗口
, 重命名當前窗口,便於識別
. 修改當前窗口編號,相當於重新排序
f 在所有窗口中查找關鍵詞,便於窗口多了切換
面板操作:
“ 將當前面板上下分屏
% 將當前面板左右分屏
x 關閉當前分屏
z tmux 1.8新特性,最大化當前所在面板,重復一遍返回
! 將當前面板置於新窗口,即新建一個窗口,其中僅包含當前面板
Ctrl+方向鍵 以1個單元格為單位移動邊緣以調整當前面板大小
Alt+方向鍵 以5個單元格為單位移動邊緣以調整當前面板大小
空格鍵 可以在默認面板布局中切換,試試就知道了
q 顯示面板編號
o 選擇當前窗口中下一個面板
方向鍵 移動光標選擇對應面板
{ 向前置換當前面板
} 向后置換當前面板
Alt+o 逆時針旋轉當前窗口的面板
Ctrl+o 順時針旋轉當前窗口的面板