使用腳本為每個項目定制一個 tmux 環(huán)境:創(chuàng)建會話,分割窗口穿撮,自動開啟項目要用到的程序等缺脉。
使用 tmux 命令創(chuàng)建定制設置
可以使用 tmux 命令在一個會話中分割窗口瞧哟,改變布局,甚至開啟程序枪向。完成這些操作的關鍵是使用 -t
target 開關。
當有一個命名 tmux 會話后咧党,可以這樣與它進行關聯(lián):
$ tmux attach -t [session_name]
我們使用 -t
開關將命令導向到相應的 tmux 會話秘蛔。假設新建了一個命名為 development 的會話:
$ tmux new -s development
可以通過 tmux 命令對其窗口進行水平分割:
$ tmux split-window -h -t development
當與該會話關聯(lián)后,可以看到該會話的窗口被分割成了水平兩個窗格了傍衡。
使用腳本配置項目開發(fā)環(huán)境
通過腳本來創(chuàng)建一個會話深员,創(chuàng)建窗口和窗格,然后在每個窗格中啟動一些程序蛙埂。
先在 home 目錄下創(chuàng)建一個 development 的腳本倦畅,并設置為可執(zhí)行:
$touch ~/development
$chmod +x ~/development
在該腳本文件中,首先創(chuàng)建一個命名為 development 的 tmux 會話:
# scripting/development
tmux new-session -s development -n editor -d
使用 -s
開關指定會話的名字為 development绣的,使用 -n
開關指定該會話的初始窗口名稱為 editor叠赐,使用 -d
開關使得創(chuàng)建后立即與其脫離。
當啟動會話后屡江,將工作目錄切換到項目目錄上芭概,如 devproject。在腳本文件中使用 tmux 的 send-keys 來改變目錄:
# scripting/development
tmux send-keys -t development 'cd ~/devproject' C-m
行末的 C-m 是 CTRL-m 惩嘉,表示發(fā)送一個回車鍵罢洲。類似地,可以在該窗口中開啟一個 Vim 編輯器:
# scripting/development
tmux send-keys -t development 'vim' C-m
分割主編輯器窗口文黎,使其下面有一個小的終端窗口惹苗,可以使用 split-window 命令:
# scripting/development
tmux split-window -v -t development
也可以指定分割窗格所占的百分比:
# scripting/development
tmux split-window -v -p 10 -t development
也可以選擇窗口使用的布局:
# scripting/development
tmux select-layout -t development main-horizontal
此時,可以對首窗口進行分割和發(fā)送命令了耸峭。
向指定的窗口和窗格發(fā)送命令
每個窗口都有一個編號桩蓉,其基編號由 set base-index
設置,而窗口中的每個窗格也有一個編號抓艳,其基編號由 setw pane-base-index
設置触机。要指定特定的窗口和窗格,使用格式: [session]:[window].[pane]
玷或,如 development:1.2
儡首。因此,在會話的首窗口的第二個窗格中切換到項目目錄:
# scripting/development
tmux send-keys -t development:1.2 'cd ~/devproject' C-m
創(chuàng)建和選擇窗口
創(chuàng)建一個全屏的終端窗口偏友,使用 new-window 命令:
# scripting/development
tmux new-window -n console -t development
tmux send-keys -t development:2 'cd ~/devproject' C-m
在新建窗口后蔬胯,進行了目錄切換,由于新窗口只有一個窗格位他,所以無需指定窗格號氛濒。
當開啟會話后产场,需要將首個窗口顯示出來,使用 select-window 命令:
# scripting/development
tmux select-window -t development:1
tmux attach -t development
在該腳本中舞竿,可以繼續(xù)增加內(nèi)容:增加窗口和窗格京景,開啟到服務器的遠程連接、打開日志文件骗奖、開啟數(shù)據(jù)庫命令行确徙、更新代碼庫,……
該例中的腳本全部內(nèi)容如下:
tmux new-session -s development -n editor -d
tmux send-keys -t development 'cd ~/devproject' C-m
tmux send-keys -t development 'vim' C-m
tmux split-window -v -t development
tmux select-layout -t development main-horizontal
tmux send-keys -t development:1.2 'cd ~/devproject' C-m
tmux new-window -n console -t development
tmux send-keys -t development:2 'cd ~/devproject' C-m
tmux select-window -t development:1
tmux attach -t development
并用以下命令執(zhí)行:
$ ~/development
該腳本每次運行都會生成一個新的會話执桌,當該會話存在時鄙皇,再運行該腳本會出錯,可以用 has-session 命令解決:
tmux has-session -t development
if [ $? !=0 ]
tmux new-session -s development -n editor -d
tmux send-keys -t development 'cd ~/devproject' C-m
tmux send-keys -t development 'vim' C-m
tmux split-window -v -t development
tmux select-layout -t development main-horizontal
tmux send-keys -t development:1.2 'cd ~/devproject' C-m
tmux new-window -n console -t development
tmux send-keys -t development:2 'cd ~/devproject' C-m
tmux select-window -t development:1
fi
tmux attach -t development
該方式只適用于某個具體項目仰挣。
通過 tmux 配置文件設置項目開發(fā)環(huán)境
.tmux.conf 文件本身可以包含命令來設置默認環(huán)境伴逸。通過上面相同的命令,可以在配置文件中設置每個開發(fā)環(huán)境的通用配置膘壶。
tmux 還可以通過 -f
開關來指定配置文件错蝴,從而我們可以在每個項目中創(chuàng)建一個專門的配置文件,并在其中設置窗口窗格香椎、快捷鍵等漱竖。
首先創(chuàng)建一個新的配置文件 app.conf,并使用上面類似的命令畜伐。由于當前是在一個 tmux 配置文件中馍惹,所以所有的命令都不再需要使用 tmux 前綴。配置文件的內(nèi)容:
# scripting/app.conf
source-file ~/.tmux.conf
new-session -s development -n editor -d
send-keys -t development 'cd ~/devproject' C-m
send-keys -t development 'vim' C-m
split-window -v -t development
select-layout -t development main-horizontal
send-keys -t development:1.2 'cd ~/devproject' C-m
new-window -n console -t development
send-keys -t development:2 'cd ~/devproject' C-m
select-window -t development:1
首行通過加載默認的 ~/.tmux.conf 文件玛界,完成了所有的默認配置万矾。
開啟命令:
$ tmux -f app.conf attach
上面的 tmux 最后有 attach 命令是因為: tmux 開啟時默認總是會運行 new-session 命令,但是我們的配置文件中已經(jīng)新建了一個會話慎框,因此通過使用 attach 避免會出現(xiàn)兩個會話良狈。
這種方法比較靈活,但是配置文件會較多笨枯。
使用 tmuxinator 管理配置
tmuxinator 是一個用于編寫和管理不同 tmux 配置文件的小工具薪丁。我們在 YAML 文件中定義窗口布局和命令,然后用 tmuxinator 來加載馅精。tmuxinator 可以對配置文件進行集中管理严嗜,并且易于創(chuàng)建復雜布局。通過它還可以指定每個窗口開啟前需執(zhí)行的命令洲敢。
tmuxinator 依賴 Ruby漫玄。
通過 Rubygems 安裝:
$sudo gem install tmuxinator
tmuxinator 需要有 EDITOR 環(huán)境變量,可以在 Linux 的 .bashrc 或 OS X 的 .bash_profile 上設置:
export EDITOR=vim
創(chuàng)建一個 tmuxinator 項目 development:
$ tmuxinator open development
執(zhí)行后會用你的編輯器顯示項目的默認配置信息,如:
#scripting/default.yaml
project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
- editor:
layout: main-vertical
panes:
- vim
- #empty, will just run plain bash
- top
- shell: git pull
- database: rails db
- server: rails s
- logs: tail -f logs/development.log
- console: rails c
- capistrano:
- server: ssh me@myhost
該 YAML 文件定義了一個 tmux 會話睦优,其中有 8 個窗口渗常。第一個窗口中有 3 個窗格,使用 main-vertical 布局汗盘。其它的窗口都開啟和運行了各種的服務和程序皱碘。同時,還可以指定在每個窗口加載時會自動運行的命令隐孽。
先創(chuàng)建一個開發(fā)環(huán)境尸执,其中 Vim 在上面,一個終端在下面:
#scripting/development.yaml, Tmuxinator 0.8.1
name: devproject
root: ~/devproject
windows:
- editor:
layout: main-horizontal
panes:
- vim
- #empty, will just run plain bash
- console: # empty
YAML 文件使用 2 個空格表示縮進缓醋。
開啟該環(huán)境:
$tmuxinator development
tmuxinator 會自動加載默認的 .tmux.conf 文件,然后再執(zhí)行我們在 YAML 文件中指定的配置信息绊诲。
重新打開配置文件修改:
$tmuxinator open development
配置文件默認都存放在 ~/.tmuxinator/ 目錄下送粱。tmuxinator 實質(zhì)上是根據(jù)我們的配置文件生成腳本命令文件,然后再一一執(zhí)行其中的命令掂之。
總結
可用于腳本中的 tmux 命令
命令 | 描述
--------------------------------------------------|
tmux new-session -s development -n editor | 創(chuàng)建一個命名為 development 的會話抗俄,并且命名首窗口為 editor
tmux attach -t development | 關聯(lián)到命名窗口 development
tmux send-keys -t development '[keys]' C-m | 向命名會話 development 中的活動窗口或窗格發(fā)送按鍵,C-m
相當于回車鍵
tmux send-keys -t development:1.0 '[keys]' C-m | 向命名會話 development 中的第 1 個窗口中的第 0 個 窗格發(fā)送按鍵世舰,C-m
相當于回車鍵
tmux select-window -t development:1 | 使命名會話 development 中的第 1 個窗口成為活動窗口
tmux split-window -v -p 10 -t development | 將命名會話 development 中的當前窗口垂直分割动雹,其中下面的窗格高度占 10%
tmux select-layout -t development main-horizontal | 為命名會話 development 選擇布局
tmux -f app.conf attach | 加載 app.conf 配置文件,并關聯(lián)到該配置文件生成的會話
tmuxinator 命令
命令 | 描述
---------------------------------------|
tmuxinator open [name] | 在默認編輯器中打開或創(chuàng)建一個項目配置文件
tmuxinator [name] | 加載并運行該項目配置文件跟压,創(chuàng)建(如果還沒有創(chuàng)建)并關聯(lián)創(chuàng)建的會話
tmuxinator list | 列出當前所有的項目
tmuxinator copy [source] [destination] | 復制項目配置文件
tmuxinator delete [name] | 刪除項目配置文件
tmuxinator implode | 刪除所有當前的項目配置文件
tmuxinator doctor | 診斷 tmuxinator 及系統(tǒng)中的配置文件
參考資源: