tmux init
Productive Mouse-Free Development
借用tmux書的副標題,來當作本文的標題。開發的過程中,只要是需要移動手去操作,例如滑鼠,甚至是在vim中移動手指頭去操作上下左右,無形中都是浪費時間。所以這裡試著配合tmux + vim的操作,來達到盡量不使用滑鼠的目標。
主要的過程一樣是參考upcase中tmux的教程。也參雜了一些我自己參考網路上其它人的設定檔,但重要的是整個調整的過程,先找出浪費時間的問題點,接著才是如何設定來克服問題。
prefix
預設的prefix是
1 | unbind-key C-b |
重新設定prefix
1 | bind a last-window |
快速切換window,所以會變成<C-a>a
,比較順手。
1 | # type twice can still send C-a |
在vim中,<C-a>
是有用處的,可以增加數字,因為tmux而不能用就太可惜了,所以設定連按兩次一樣會送出<C-a>
,另外參數-r
接示可以按著Ctrl鍵後再按a
連發。
Reload Config
要測試設定檔最好的方式就是邊改邊試,所以重新載入設定檔就變成一個常執行的動作。
這邊就要先介紹一下tmux的plugin,tmux-sensible,它的目標是有一個所有tmux的使用者都能接受的設定檔,所以含蓋了一些基本的設定,包含我們現在要講的重載設定檔
1 | # source .tmux.conf as suggested in `man tmux` |
TPM (Tmux Plugin Manager)
既然上節提到了tmux plugin,那就得說說TPM,能幫助我們安裝套件,讓我們直接站在別人的肩膀上。
Integration with Vim
因為主力開發是Vim,所以當然要考慮同時使用Vim的情況下,因此vim-tmux-navigator這個套件就是因此而生的,作者也就是upcase tmux的主講人。
裝上後就可以用<C-h>
<C-j>
<C-k>
<C-l>
無縫在tmux pane和vim split window中自由的移動。
Pane Control
tmux-pain-control這個套件加入了幾個操作pane常用的功能,作者把名字故意取作pain
,想必是原本在操作pane覺得很痛苦XD
另一個bind-key設定
1 | bind-key b break-pane -d |
可以把pane切出去另一個window
或是把另一個window的pane join過來
1 | bind-key j command-prompt -p "join pane from: " "join-pane -h -s '%%'" |
交換pane
1 | bind-key s display-panes\; command-prompt -p "pane #: " "swap-pane -t '%%'" |
Resize panes
prefix + H/J/K/L 可以控制當前pane的上下左右大小。
Spliting panes
- prefix + | 望文生義,就不用解釋了
- prefix + / 和上面一樣,但是會以全畫面來切割左右
- prefix + - 一樣望文生義
- prefix + _ 和上面一樣,但是會以全畫面來切割上下
Copy Text
在最前面提到了,既然想要盡量不使用滑鼠,面對查找Log時就會遇到困難。原來在iTerm中還可以用滑鼠滾動,圈選和複制,但是到了tmux就沒辦法。不方便沒錯,但是記住我們一開始的目標就是放在要能有效的操作,所以滑鼠的方便性在這裡我們只能捨去。
prefix + [
可以進入copy mode,tmux的copy mode能夠切換成vi mode,對vim的使用者比較親切
1 | # Use vim keybindings in copy mode |
另外加入bind-key v
V
r
y
讓操作更接近vim的習慣。
可以按q
跳離copy mode。
在copy mode中也能像vim一樣用/
做搜尋,或者是想要更進階的話可以用tmux-copycat。
參考網頁的說明:
1 | This plugin enables: |
原本copy需要另外安裝其它套件,不過現在較新的版本tmux/iTerm可以不用麻煩了:
If you have tmux 1.5 or newer and are using iTerm2 version 3 or newer then the y in copy-mode and mouse selection will work without tmux-yank.
To enable this:
- Go into iTerm2’s preferences.
- Go to the “General” tab.
- Check “Applications in terminal may access clipboard”
Session List Control
如果需要開其它的專案,這時候就會考慮再開一個新的session,那麼session管理的需求就會出現了,可以考慮用tmux-sessionlist這個套件。
prefix + g
尋找session,名字可以部份matchprefix + C
新增sessionprefix + X
刪除sessionprefix + S
切換上一個sessionprefix + @
把這個pane切出去另一個session