Tmux是一個終端復(fù)用器,網(wǎng)上配置要多少有多少,但是秉承“自己的才是最好的”原則捂寿,我決定照葫蘆畫瓢寫一份自己的Tmux配置牡拇。
然后發(fā)現(xiàn)魁瞪,網(wǎng)上大部分(99%)Tmux配置都沒有把遠程的情況考慮進去,例如VNC遠程快捷鍵惠呼、ssh遠程快捷鍵的傳送等問題都沒考慮進去导俘,于是幾乎重新設(shè)計了所有常用的快捷鍵。然后又使用了一段時間剔蹋,不斷改進旅薄,今天決定把它分享出來。
特點:
- 為遠程操作設(shè)計的快捷鍵泣崩,完美實現(xiàn)在Tmux里跑Tmux的場景少梁。
- 自動連接上一次退出的會話洛口,無縫銜接上一次操作(防止意外退出而中斷操作)。
- 快捷鍵合理分配凯沪,所有快捷鍵操作都不需要移動手腕(筆記本電腦而言第焰,移動手腕算我輸)。
- 插件安裝/更新妨马、自定義外觀挺举、自定義設(shè)置均可一鍵操作(設(shè)置了快捷鍵直接編輯)。
- 一條命令即可安裝身笤。
項目地址:https://github.com/izuolan/.tmux
Prefix
最佳:Alt-z
Prefix豹悬,這是整個Tmux能否高效使用的關(guān)鍵,因此Prefix兩個按鍵必須鍵程合適液荸,不需要移動太遠的范圍瞻佛。
Tmux默認(rèn)是Ctrl-b
,大部分Tmux配置選擇改為Ctrl-a
娇钱,或者Ctrl-z
伤柄,老實說Ctrl-z
這個方案最容易讓人接受,鍵程最短文搂,不容易誤按适刀,然而大部分Terminal都把Ctrl-z
設(shè)為suspend快捷鍵,這可就尷尬了煤蹭,特別是遠程時用vim打著代碼笔喉,突然按兩下Prefix就把vim掛起了,非常影響使用硝皂。
于是嘗試不少組合之后常挚,決定把 Alt-z
設(shè)為 Prefix,超短鍵程稽物,沒有常用的快捷鍵沖突(大概)奄毡。考慮到鍵盤布局差異贝或,這兩個鍵一般都不會相隔太遠吼过。
有了Prefix,接下來就是圍繞z
鍵設(shè)置快捷鍵咪奖。接下來不廢話盗忱,直接介紹快捷鍵設(shè)置,以及在解釋為何在遠程中這樣設(shè)置最科學(xué)羊赵。
會話
創(chuàng)建會話(new session售淡,所以使用快捷鍵n
):
# 創(chuàng)建, tmux new -s <name-of-my-session> 創(chuàng)建一個新的會話
$ tmux new -s basic
# 在tmux中創(chuàng)建一個會話
[PREFIX-n] new -s <name-of-my-session>
離開會話(后臺運行,默認(rèn)d
)
# 分離會話 detach
[PREFIX-d]
[detached (from session basic)]
# or
$ tmux detach
查看會話列表慷垮,切換會話
# 查看已有會話列表(list-session)
$ tmux ls
basic: 1 windows (created Wed Aug 5 14:54:04 2015) [200x49]
# 在tmux中查看會話列表并切換
[PREFIX-s]
重新進入會話
# 連接會話(只有一個)
$ tmux attach
$ tmux attach -t basic
$ tmux a -t basic
關(guān)閉會話
# 退出會話
$ tmux kill-session -t <Num>
# or
[PREFIX-Alt-q]
# 殺掉全部會話
$ tmux kill-server
重命名會話
# 重命名會話
[PREFIX-$]
會話我基本沒有改動默認(rèn)配置揖闸,因為我一般不會遇到需要操作多個會話的情況。
窗口
創(chuàng)建窗口(create window料身,所以設(shè)置為c
)
# 創(chuàng)建一個新的窗口
[PREFIX-c]
重命名窗口(這個保留默認(rèn),
)
# 重命名一個窗口
[PREFIX-,] 之后輸入名字回車
切換窗口
# 切換窗口
[PREFIX-[]
[PREFIX-]]
# 設(shè)置這兩個鍵是因為不需要移動手腕汤纸,一般就在回車鍵上面,又剛好成對芹血。vi中常用的h贮泞、l后面會用到,所以這里不用幔烛。
# 切換到對應(yīng)窗口
[PREFIX-1/2/3]
# 切換到上一個窗口
[PREFIX-Tab]
# 可視化選擇切換到的窗口
[PREFIX-w]
退出窗口
# 退出窗口
exit
# 與窗口列表快捷鍵類似啃擦,`Alt-w`就是關(guān)閉,直接`w`就是窗口列表饿悬,簡單好記令蛉。
[PREFIX-Alt-w] 會有確認(rèn)
面板
分割面板(鍵盤上唯有這兩個鍵最直觀表達分屏效果,所以就是\
和-
啦)
# 垂直/水平分割窗口
[PREFIX--] / [PREFIX-\]
關(guān)閉面板
# 關(guān)閉一個面板, 要確認(rèn)
[PREFIX-x]
# 或者
exit [面板里執(zhí)行]
切換面板
[PREFIX-hjkl] pane之間移動
[PREFIX-arrow] pane之間移動
[PREFIX-Space] 最近使用兩個窗口之間切換
[PREFIX-q] 展示窗口數(shù)字并選擇跳轉(zhuǎn)
為了統(tǒng)一遠程與本地的快捷鍵狡恬,即便是Pane操作我也設(shè)置了需要Prefix才能觸發(fā)珠叔,不喜歡的話可以改為直接觸發(fā),但這樣本地與遠程快捷鍵不統(tǒng)一弟劲,反而有些麻煩祷安。
移動面板
[PREFIX-<] 當(dāng)前pane移到左邊
[PREFIX->] 當(dāng)前pane移到右邊
調(diào)整面板
[PREFIX-HJKL] pane大小調(diào)整
[PREFIX-Alt-arrow] pane大小調(diào)整
# 此處的Pane調(diào)整算是我最不滿意的一個地方,因為Alt-h剛好是man命令的快捷鍵兔乞,避免沖突只能放棄Alt-hjkl的方式汇鞭,改為PREFIX-HJKL,這里手指要多移動一次到Shift鍵上面真是讓人不爽庸追。因此補充一組快捷鍵霍骄,使用方向鍵調(diào)整。
[PREFIX-z] 暫時把窗口變大
其他
[PREFIX-!] 當(dāng)前面板在新的窗口中打開
[PREFIX-space] 會自動切換依次使用這些布局(幾種窗口布局輪流切換)
復(fù)制粘貼
[PREFIX-[] 進入復(fù)制模式
[PREFIX-Enter] 進入復(fù)制模式
=> 可以進行的操作
space/v 開始選擇
Ctrl-v 整塊選擇
hjkl 方向鍵移動
w/b 向前向后移動一個單詞
fx/Fx 行內(nèi)移動到下一個字符位置
ctrl-b/f 在緩沖區(qū)里面翻頁
g/G 到緩沖區(qū)最頂/底端
/ ? 向下, 向上查找
n/N 查找后下一個, 上一個
Enter/y 復(fù)制
[PREFIX-]] 粘貼
# 其他增強:
# 復(fù)制整個pane可見區(qū)域
[PREFIX-:] capture-pane
# 查看緩沖區(qū)內(nèi)容
[PREFIX-:] show-buffer
# 列出緩沖區(qū)列表
[PREFIX-:] list-buffers
# 從緩沖區(qū)列表選擇并插入到當(dāng)期面板
[PREFIX-:] choose-buffer => 回車
其他
顯示全部快捷鍵
[PREFIX-?] 查看所有快捷鍵
[PREFIX-e] 編輯Tmux配置
[PREFIX-E] 編輯主題
[PREFIX-`] 同步Pane操作
[PREFIX-~] 取消同步操作
命令模式
[PREFIX-:]
# 一些命令模式下的命令
# 新建窗口
new-window -n console
# 新建并執(zhí)行命令
new-window -n processes "top"
增強
1. Tmuxinator
Tmuxinator 是一個 Ruby 的 gem 包锚国,可用于創(chuàng)建 Tmux 的會話腕巡。它的工作方式是先在配置文件中定義會話中的細節(jié),然后用 1 條命令創(chuàng)建出這些會話
gem install tmuxinator
tmuxinator new project_a => ~/.tmuxinator/project_a.yml => 配置
啟動: tmuxinator start project_a
可以別名: mux start project_a
2. vim 插件
christoomey/vim-tmux-navigator
, 安裝更便捷的導(dǎo)航跳轉(zhuǎn)