使用腳本爲每一個項目定製一個 tmux 環境:建立會話,分割窗口,自動開啓項目要用到的程序等。mysql
能夠使用 tmux 命令在一個會話中分割窗口,改變佈局,甚至開啓程序。完成這些操做的關鍵是使用 -t
target 開關。git
當有一個命名 tmux 會話後,能夠這樣與它進行關聯:sql
$ tmux attach -t [session_name]
咱們使用 -t
開關將命令導向到相應的 tmux 會話。假設新建了一個命名爲 development 的會話:shell
$ tmux new -s development
能夠經過 tmux 命令對其窗口進行水平分割:數據庫
$ tmux split-window -h -t development
當與該會話關聯後,能夠看到該會話的窗口被分割成了水平兩個窗格了。vim
經過腳原本建立一個會話,建立窗口和窗格,而後在每一個窗格中啓動一些程序。windows
先在 home 目錄下建立一個 development 的腳本,並設置爲可執行:api
$touch ~/development $chmod +x ~/development
在該腳本文件中,首先建立一個命名爲 development 的 tmux 會話:bash
# scripting/development tmux new-session -s development -n editor -d
使用 -s
開關指定會話的名字爲 development,使用 -n
開關指定該會話的初始窗口名稱爲 editor,使用 -d
開關使得建立後當即與其脫離。服務器
當啓動會話後,將工做目錄切換到項目目錄上,如 devproject。在腳本文件中使用 tmux 的 send-keys 來改變目錄:
# scripting/development tmux send-keys -t development 'cd ~/devproject' C-m
行末的 C-m 是 CTRL-m ,表示發送一個回車鍵。相似地,能夠在該窗口中開啓一個 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
此時,能夠對首窗口進行分割和發送命令了。
每一個窗口都有一個編號,其基編號由 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
建立一個全屏的終端窗口,使用 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
在該腳本中,能夠繼續增長內容:增長窗口和窗格,開啓到服務器的遠程鏈接、打開日誌文件、開啓數據庫命令行、更新代碼庫,……
該例中的腳本所有內容以下:
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
並用如下命令執行:
$ ~/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.conf 文件自己能夠包含命令來設置默認環境。經過上面相同的命令,能夠在配置文件中設置每一個開發環境的通用配置。
tmux 還能夠經過 -f
開關來指定配置文件,從而咱們能夠在每一個項目中建立一個專門的配置文件,並在其中設置窗口窗格、快捷鍵等。
首先建立一個新的配置文件 app.conf,並使用上面相似的命令。因爲當前是在一個 tmux 配置文件中,因此全部的命令都再也不須要使用 tmux 前綴。配置文件的內容:
# 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 命令,可是咱們的配置文件中已經新建了一個會話,所以經過使用 attach 避免會出現兩個會話。
這種方法比較靈活,可是配置文件會較多。
tmuxinator 是一個用於編寫和管理不一樣 tmux 配置文件的小工具。咱們在 YAML 文件中定義窗口布局和命令,而後用 tmuxinator 來加載。tmuxinator 能夠對配置文件進行集中管理,而且易於建立複雜佈局。經過它還能夠指定每一個窗口開啓前需執行的命令。
tmuxinator 依賴 Ruby。
經過 Rubygems 安裝:
$sudo gem install tmuxinator
tmuxinator 須要有 EDITOR 環境變量,能夠在 Linux 的 .bashrc 或 OS X 的 .bash_profile 上設置:
export EDITOR=vim
建立一個 tmuxinator 項目 development:
$ tmuxinator open development
執行後會用你的編輯器顯示項目的默認配置信息,如:
#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 佈局。其它的窗口都開啓和運行了各類的服務和程序。同時,還能夠指定在每一個窗口加載時會自動運行的命令。
先建立一個開發環境,其中 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 個空格表示縮進。
開啓該環境:
$tmuxinator development
tmuxinator 會自動加載默認的 .tmux.conf 文件,而後再執行咱們在 YAML 文件中指定的配置信息。
從新打開配置文件修改:
$tmuxinator open development
配置文件默認都存放在 ~/.tmuxinator/ 目錄下。tmuxinator 實質上是根據咱們的配置文件生成腳本命令文件,而後再一一執行其中的命令。
命令 | 描述 |
---|---|
tmux new-session -s development -n editor | 建立一個命名爲 development 的會話,而且命名首窗口爲 editor |
tmux attach -t development | 關聯到命名窗口 development |
tmux send-keys -t development '[keys]' C-m | 向命名會話 development 中的活動窗口或窗格發送按鍵,C-m 至關於回車鍵 |
tmux send-keys -t development:1.0 '[keys]' C-m | 向命名會話 development 中的第 1 個窗口中的第 0 個 窗格發送按鍵,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 配置文件,並關聯到該配置文件生成的會話 |
命令 | 描述 |
---|---|
tmuxinator open [name] | 在默認編輯器中打開或建立一個項目配置文件 |
tmuxinator [name] | 加載並運行該項目配置文件,建立(若是尚未建立)並關聯建立的會話 |
tmuxinator list | 列出當前全部的項目 |
tmuxinator copy [source] [destination] | 複製項目配置文件 |
tmuxinator delete [name] | 刪除項目配置文件 |
tmuxinator implode | 刪除全部當前的項目配置文件 |
tmuxinator doctor | 診斷 tmuxinator 及系統中的配置文件 |
參考資源: