若要同時可以操作多個 shell,古老但管用的 screen 工具可以派上用場。執行 screen 指令後,使用 [Ctrl+a, S] 可以建立垂直分割的畫面,再用 [Ctrl+a, <TAB>] 切換到第二個畫面,以 [Ctrl+a, c] 就可以建立第二個 shell。
![]() |
screen 垂直分割 |
但是如果想要水平分割,就只有某些版本的 screen 可以做到。對於現在的寬螢幕來說,不能水平分割實在很不方便。
更好的替代方案是改用 tmux 工具,它可以輕鬆做到水平分割。
Ubuntu / Debian 安裝方式
sudo apt-get install tmux
Mac OS X + MacPorts 安裝方式
sudo apt-get install tmux
執行 tmux
tmux 會建立一個 server,在 Terminal 執行一次 tmux 指令後,就可以再用 tmux + 參數操作。
例如建立垂直分割:
tmux split-window
執行後會建立新的分割畫面(pane),並自動開啟一個新的 shell。
要在兩個畫面之間切換,需要先按 Ctrl + b 再用上下左右按鍵選擇畫面。
如果已經習慣 screen 的 Ctrl + a,可以參考這篇將熱鍵設定成 Ctrl + a。一般的鍵盤要用同一隻手按 Ctrl + b 比較不容易,所以建議重設這組熱鍵。
接下來再建立一個新的水平分割,加上 -h (horizontal)指令。
每次都要下這些指令很麻煩,所以建議將常用的指令寫成 script,例如建立 tmux-workspace.sh,並將 tmux split-window 等指令都放進去,日後只要直接執行 script 就能自動開啟慣用的工作畫面。
tmux 也提供 layout 的定義,只要按下「Ctrl+a <ESC> 1」,數字 1~5 共有五組預設 layout 可選,可以依照 layout 定義的畫面配置方式重新排列。
更多 tmux 用法可參考這些文章。
用 tmux 還要搭配 tmuxifier 這個工具,可以讓工作畫面的建立更加方便。
使用 git clone 安裝 tmuxifier
git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier
在 ~/.profile 加入一行設定,讓 tmuxifier 指令自動列入 $PATH 環境變數。
[[ -s "$HOME/.tmuxifier/init.sh" ]] && source "$HOME/.tmuxifier/init.sh"
接下來先檢查是否有 $EDITOR 變數。
echo $EDITOR
如果沒有設定,或想要修改,一樣把設定寫到 ~/.profile。
export EDITOR=vim
這邊指定用 vim 當成預設編輯工具。
重新啟動 shell 讓設定生效。
接下來,可以開始建立 tmuxifier 的視窗設定。
tmuxifier new-window example
這個指令會打開預設編輯器(vim),就可以編輯 example 這個新視窗定義的 script。
# 可以直接指定某專案的路徑作為預設 Shell 的 Working Directory
window_root "~/project/example"
# 設定標題
new_window "Example"
# 先建立水平分割 50% 寬度
split_h 50
# 後建立垂直分割 50% 高度
split_v 50
# 分別在編號 0~2 三個畫面跑指令
run_cmd "vim" 0
run_cmd "date" 1
run_cmd "htop" 2
# 將游標切換到畫面 0
select_pane 0
# 因為主畫面 0 已經進入 VIM,可以對它送出編輯或操作指令
send_keys "iI Love Vim"
定義好之後先儲存視窗設定。
打開視窗前需要先進入 tmux。
tmux
進入 tmux 之後再利用 load-window 指令打開定義的視窗。
tmux load-window example
所以 tmuxifier 可以很方便地依照個人使用習慣,將打造開發環境所需的畫面配置及功能,先寫在視窗定義裡,日後只要用 load-window 就能快速建立工作環境。
之後想要修改 window 的設定,則利用 edit-window 指令。
tmuxifier edit-window example
以我的 Grails 開發環境來說,使用的視窗定義如下:
window_root "~/project/codecanaan"
new_window "CodeCanaan"
split_h 45
split_v 40
run_cmd "vim" 0
run_cmd "grails" 1
run_cmd "htop" 2
select_pane 0
send_keys "\t"
這組設定可以快速建立三個畫面,分別執行 vim、grails、htop 指令,並且利用 \t 打開 Vim Command-T 所提供的檔案搜尋功能,方便在工作環境啟動後,可以快速選擇想要編輯的檔案。
還有最重要的功能,就是 tmux 與 screen 一樣都可以重新 attach 尚未結束的 session。對於有架設 Linux 或租用 VPS 的開發者,只要在主機上利用 tmux 建立好開發環境,就可以隨時 detach 然後結束遠端連線;當下次需要重新上線工作,只要再 attach 就能重新回到繼續運行的畫面。
這個操作流程大概是這樣:
- 遠端 ssh 連線登入主機。
- 執行 tmux。
- 工作完成一段落後,按 Ctrl + b(或 a),再輸入 :detach 離開 tmux。
- 這時候已經打開的 tmux 與畫面中的程式仍然在背景運作。
- 結束 ssh 連線,收工,睡覺。
回復工作狀態的方法是:
- 重新連線 ssh 登入遠端主機。
- 使用 tmux attach 指令重新接上 session。
- 繼續工作!
tmux 加上 mosh 不就讓人不知道還有回去這件事...:p
回覆刪除