2012年7月15日 星期日

介紹: From Screen To Tmux

近日 coolshell 的 28神器文 引起了許多人的注意
(身為一個真的不會 linux 的人,只好加到書籤,慢慢研究)
其中神器 tmux 又因此被推薦啦!

由於這幾個月摸 linux 以來不斷的聽到有人說 tmux 比 screen 好用
而 screen 我僅僅只會一點皮毛(黏、不黏、新增、刪除、改名)就覺得很方便了
索性便藉此從 screen 換到 tmux
順便好好學一下此類的工具
以下為個人的筆記與心得,整理成問答的方式:



1. 為什麼要從 screen 轉換到 tmux ?


專業的回答 在此 ,而對我而言其實 screen 的功能已經算夠用
如果平常 screen 也只是開兩三個分頁,或者螢幕根本不大
那麼其實換到 tmux 在閱讀以及視窗轉換上,並沒有辦法得到多大的好處

但我轉換到 tmux 以後,花了好幾個小時思考及設定 .tmux.conf 的設置
因而能夠自動初始化我的工作環境,對於日後生產力的提升肯定是有的!


2. 如何從 screen 無痛轉換到 tmux ?

專業的無痛轉換 在此,說穿了就是把 tmux 的快捷建設定跟 screen 一樣
那基本上就不會痛了!另外建議將 .tmux.conf 也加入版控系統中吧!
我比較懶惰一點,因此 .screenrc .tmux.conf 都是塞在 vim 的 repository 裡面
然後再 ln -s 建立對應的連結,放在家目錄下


3. 如何設定 .tmux.conf 以提升效率?

第一位專家 在此
有兩行設定很值得參考:
bind-key r source-file ~/.tmux.conf 
bind-key S command-prompt -p ssh: "new-window -n %1 'ssh %1'"
前者使得 tmux 的 .tmux.conf 設定檔可以動態的更新
後者的 command-prompt 用法,則是利用快捷建開啟新視窗及啟動 ssh 程式

第二位專家 在此
相信很多人一看到 #!/bin/sh 眼睛就會亮了 ....
這邊是透過撰寫 shell script 來自動初始化工作環境

第三位專家們 在此
這是 stackoverflow 的討論串
有許多種初始化工作環境的方法
下面這一種在 .tmux.conf 中設定快捷鍵去讀取外部檔案以進行初始化的方法頗有趣:
bind S source-file ~/.tmux/session1
在 session1 此檔案中可以定義該如何初始化,如:
new -s hello -n world
就代表新增一個名為 hello 的 session 並且切出一個名為 world 的視窗



4. 如何更瘋狂的設定 .tmux.conf 以提升效率?

不專業的回答在此,請大家斟酌參考!
首先可以使用 bind -n F9 new-window 此類的方式讓鍵盤上的 Function Key 有事情做

如果大家真的很討厭按 ctrl + a 或是 ctr + b 這一種 prefix 的設定方式的話
其實也可以把 prefix 設定成單鍵,如某個 Function Key
小缺點是 Function Key 可能有點遠
因此我選擇將 prefix 設定成: `     <-- 就是跟 ~ 同一顆鍵盤按鍵的符號
為了讓 vim 裡面常用的快捷鍵 `` 以及 `. 可以正常運作
因此我加上了:
unbind '.'
bind '.' send-keys '`''.'
unbind '`'
bind '`' send-keys '`''`'

至於原本 vim 的前往書籤功能
我選擇改為使用 <leader> + m + 書籤字母
~/.vimrc 加上這一行:
nnoremap <silent> <leader>m `
所以最後就變成:
ma               -> 建立書籤a
<leader>ma  -> 前往書籤a
由於我不常用到自定義書籤功能,所以我是可以接受多敲一個鍵的!

這樣的小缺點是真的要打出 ` 符號的時候,必須連敲兩下才會一口氣出現兩個 ``
不過我真的不常打這一個符號!便利性遠大於不便利!
這樣子設定之後,tmux 應該已經沒有不好打的快捷鍵了
即便有,也可以透過修改 .tmux.conf 來簡化他!



希望大家使用 tmux 愉快!



備註:
.tmux.conf 的設定方式,可能因版本不同而略有小差異
如果嘗試使用專業或不專業的建議而出現錯誤訊息
煩請注意錯誤訊息上面所寫的正確用法或是詢問 google