又雙叒叕一份Tmux配置:專為遠端設計的按鍵方案

weixin_33895657發表於2017-06-11

Tmux是一個終端複用器,網上配置要多少有多少,但是秉承“自己的才是最好的”原則,我決定照葫蘆畫瓢寫一份自己的Tmux配置。

然後發現,網上大部分(99%)Tmux配置都沒有把遠端的情況考慮進去,例如VNC遠端快捷鍵、ssh遠端快捷鍵的傳送等問題都沒考慮進去,於是幾乎重新設計了所有常用的快捷鍵。然後又使用了一段時間,不斷改進,今天決定把它分享出來。

137499-c741ac437f4f4e23.png
Tmux

特點:

  • 為遠端操作設計的快捷鍵,完美實現在Tmux裡跑Tmux的場景。
  • 自動連線上一次退出的會話,無縫銜接上一次操作(防止意外退出而中斷操作)。
  • 快捷鍵合理分配,所有快捷鍵操作都不需要移動手腕(膝上型電腦而言,移動手腕算我輸)。
  • 外掛安裝/更新、自定義外觀、自定義設定均可一鍵操作(設定了快捷鍵直接編輯)。
  • 一條命令即可安裝。

專案地址:https://github.com/izuolan/.tmux

Prefix

最佳:Alt-z

Prefix,這是整個Tmux能否高效使用的關鍵,因此Prefix兩個按鍵必須鍵程合適,不需要移動太遠的範圍。

Tmux預設是Ctrl-b,大部分Tmux配置選擇改為Ctrl-a,或者Ctrl-z,老實說Ctrl-z這個方案最容易讓人接受,鍵程最短,不容易誤按,然而大部分Terminal都把Ctrl-z設為suspend快捷鍵,這可就尷尬了,特別是遠端時用vim打著程式碼,突然按兩下Prefix就把vim掛起了,非常影響使用。

於是嘗試不少組合之後,決定把 Alt-z 設為 Prefix,超短鍵程,沒有常用的快捷鍵衝突(大概)。考慮到鍵盤佈局差異,這兩個鍵一般都不會相隔太遠。

有了Prefix,接下來就是圍繞z鍵設定快捷鍵。接下來不廢話,直接介紹快捷鍵設定,以及在解釋為何在遠端中這樣設定最科學。

會話

建立會話(new session,所以使用快捷鍵n):

# 建立, tmux new -s <name-of-my-session> 建立一個新的會話
$ tmux new -s basic
# 在tmux中建立一個會話
[PREFIX-n] new -s <name-of-my-session>
137499-640df64b7fe9989b.gif
新建會話

離開會話(後臺執行,預設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

關閉會話

# 退出會話
$ tmux kill-session -t <Num>
# or
[PREFIX-Alt-q]
# 殺掉全部會話
$ tmux kill-server

重新命名會話

# 重新命名會話
[PREFIX-$]

會話我基本沒有改動預設配置,因為我一般不會遇到需要操作多個會話的情況。

視窗

建立視窗(create window,所以設定為c

# 建立一個新的視窗
[PREFIX-c]

重新命名視窗(這個保留預設,

# 重新命名一個視窗
[PREFIX-,] 之後輸入名字回車

切換視窗

# 切換視窗
[PREFIX-[]
[PREFIX-]]
# 設定這兩個鍵是因為不需要移動手腕,一般就在Enter鍵上面,又剛好成對。vi中常用的h、l後面會用到,所以這裡不用。
# 切換到對應視窗
[PREFIX-1/2/3]
# 切換到上一個視窗
[PREFIX-Tab]
# 視覺化選擇切換到的視窗
[PREFIX-w]

退出視窗

# 退出視窗
exit 
# 與視窗列表快捷鍵類似,`Alt-w`就是關閉,直接`w`就是視窗列表,簡單好記。
[PREFIX-Alt-w] 會有確認

皮膚

分割皮膚(鍵盤上唯有這兩個鍵最直觀表達分屏效果,所以就是\- 啦)

# 垂直/水平分割視窗
[PREFIX--] / [PREFIX-\]

關閉皮膚

# 關閉一個皮膚, 要確認
[PREFIX-x]
# 或者
exit [皮膚裡執行]

切換皮膚

[PREFIX-hjkl]   pane之間移動
[PREFIX-arrow]  pane之間移動

[PREFIX-Space]  最近使用兩個視窗之間切換
[PREFIX-q]    展示視窗數字並選擇跳轉

為了統一遠端與本地的快捷鍵,即便是Pane操作我也設定了需要Prefix才能觸發,不喜歡的話可以改為直接觸發,但這樣本地與遠端快捷鍵不統一,反而有些麻煩。

移動皮膚

[PREFIX-<] 當前pane移到左邊
[PREFIX->] 當前pane移到右邊

調整皮膚

[PREFIX-HJKL]      pane大小調整
[PREFIX-Alt-arrow] pane大小調整
# 此處的Pane調整算是我最不滿意的一個地方,因為Alt-h剛好是man命令的快捷鍵,避免衝突只能放棄Alt-hjkl的方式,改為PREFIX-HJKL,這裡手指要多移動一次到Shift鍵上面真是讓人不爽。因此補充一組快捷鍵,使用方向鍵調整。
[PREFIX-z]    暫時把視窗變大

其他

[PREFIX-!]     當前皮膚在新的視窗中開啟
[PREFIX-space] 會自動切換依次使用這些佈局(幾種視窗布局輪流切換)

複製貼上

[PREFIX-[]      進入複製模式
[PREFIX-Enter]  進入複製模式

=> 可以進行的操作
space/v    開始選擇
Ctrl-v     整塊選擇
hjkl       方向鍵移動
w/b        向前向後移動一個單詞
fx/Fx      行內移動到下一個字元位置
ctrl-b/f   在緩衝區裡面翻頁
g/G        到緩衝區最頂/底端
/ ?        向下, 向上查詢
n/N        查詢後下一個, 上一個
Enter/y    複製
[PREFIX-]] 貼上

# 其他增強:

# 複製整個pane可見區域
[PREFIX-:] capture-pane

# 檢視緩衝區內容
[PREFIX-:] show-buffer

# 列出緩衝區列表
[PREFIX-:] list-buffers

# 從緩衝區列表選擇並插入到當期皮膚
[PREFIX-:] choose-buffer => 回車

其他

顯示全部快捷鍵

[PREFIX-?]  檢視所有快捷鍵
[PREFIX-e]  編輯Tmux配置
[PREFIX-E]  編輯主題
[PREFIX-`]  同步Pane操作
[PREFIX-~]  取消同步操作

命令模式

[PREFIX-:]

# 一些命令模式下的命令
# 新建視窗
new-window -n console

# 新建並執行命令
new-window -n processes "top"

增強

1. Tmuxinator

Tmuxinator 是一個 Ruby 的 gem 包,可用於建立 Tmux 的會話。它的工作方式是先在配置檔案中定義會話中的細節,然後用 1 條命令建立出這些會話

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, 安裝更便捷的導航跳轉


參考連結:

Tmux

gpakosz/.tmux

jbnicolai/tmux

tmux-plugins

Arch Wiki

tmuxifier

相關文章