Tmux 的配置有很項,網上說的夠多了,這裡我就說兩條,網上經常弄錯的地方:

第一:escape-time 該設置成多少?

很多配置都不解釋一下,直接一句:

set-option -g escape-time 0

好點的還會說一下,可以解決 ESC 鍵延遲,終端標準 VT220 下面,所有遊標,功能鍵都是一系列以 ESC 字元(ascii 碼 0x1b)開頭的字元串,你可以終端下用下面命令:

showkey -a

測試下各種 F1-F12,遊標鍵,ALT+字元,Hom/End 等按鍵是不是如此。那麼終端,包括 ncurses 庫都是根據一個超時(默認一秒)來判斷用戶到底是單獨按下了 ESC 鍵,還是按下了一個功能鍵,如果是按下一個功能鍵,後面的控制字元串應該很快一起發送過來,如果超時了,就判斷為單獨按下 ESC。

那麼除非你不打算在 tmux 裏使用 ALT 鍵或者功能鍵來控制 tmux,否則你設置成 0的話,tmux中判斷功能鍵和 ALT+字元 會經常失效,因為不可能每次鍵盤掃描碼都同時到達,你在本機測似沒問題,但透過網路的話,功能鍵就會經常失效。

比如我們如果想在 tmux 中綁定一些 F1/F12,功能鍵,ALT+字元 等按鍵,就必須設置成一個合理值,比如久經考驗的 50 毫秒:

set-option -g escape-time 50

那麼當 tmux 通過 50 毫秒,通常更短(沒有匹配被綁定的熱鍵的鍵盤碼字元串,或者匹配到了)就可以決定是要把該鍵盤碼傳給低下的程序呢,還是該按鍵是需要觸發一個 tmux 功能?

所以我們裡面使用 vim 的話,設置 ttimeoutlen 時就需要判斷一下:

if $TMUX !=
set ttimeoutlen=20
elseif &ttimeoutlen > 60 || &ttimeoutlen <= 0
set ttimeoutlen=60
endif

如果外層已經有一個 tmux 了,那麼 tmux 服務相對 vim 是本地通信,可以把 ttimeoutlen 設置短一些,因為是本地網路傳輸,否則長一點。

這樣就不會因為 tmux 的超時設置影響 vim 裡面的超時判斷的時間了。

第二:tmux 快捷鍵要修改麼?

不少人不修改默認的 prefix CTRL+b 就直接用了,我只能說 tmux 的這個默認快捷鍵設計的很糟糕,很多軟體都在用 CTRL+b:

  • bash/python/zsh:所有基於 readline 寫的命令行軟體,CTRL+B 都用作 「遊標左移」
  • emacs/nano/info:大量編輯器/文檔閱讀器中 CTRL+B 同樣被用作「遊標左移」
  • vim:CTRL+B 是向後翻頁的意思

可以看得出來,CTRL+B是一個高頻使用的按鍵,要高效的使用上述軟體,CTRL+B必不可少,所以除非你不用上面的軟體,或者用了卻要想辦法繞過 CTRL+B 換用更麻煩的方式。否則的話,tmux 快捷鍵請選擇一個不太常用的組合。

比如我用的:

ALT+`

就是 ALT 和 1左邊那個按鈕一起按,我沒有在任何軟體裡面發現有這個快捷組合,留給 tmux 正好,如果你的終端 ALT 鍵支持有問題,搞不定的話,還可以用:

  • CTRL+A:至少不像 CTRL+B 那麼常用,但是不少軟體也還是會用到。
  • CTRL+Z:有些軟體用,bash下用於將進程掛到後臺,但是頻率不算高,按兩次也行。
  • CTRL+_:就是 CTRL+減號(mintty/wsltty下面是按 CTRL+/),很好的避開了字母區。
  • CTRL+:CTRL+反斜槓,也很好的避開了字母區。
  • CTRL+@:就是 CTRL+數字2
  • `:直接數字1左邊那個鍵(評論區推薦),該鍵再各種軟體中用的不多,轉義也很方便。

這三個快捷鍵都避開了常用的 CTRL 組合,不容易影響 tmux 裡面運行的程序,但就按起來的手感的話,ALT+` 是最好按的,左手拇指按住 ALT,小指按反引號。

比如焦點在不同窗口中移動:

ALT+` H
ALT+` L
ALT+` J
ALT+` K

左手負責先按下 ALT+反引號,右手負責控制跳轉方向,明顯比其他的前綴更好按

不修改配置文件的情況下,你可以在 tmux 的窗口中用命令行臨時更改 tmux 快捷鍵:

tmux set-option -g prefix c-a
tmux set-option -g prefix c-_
tmux set-option -g prefix c-@
tmux set-option -g prefix c-
tmux set-option -g prefix m-`
tmux set-option -g prefix `

實驗好了再固化到 ~/.tmux.conf 中去,比默認的 CTRL+b 合理多了。


推薦閱讀:
相關文章