Tmux 學習摘要3--使用腳本定製 tmux 環境

使用腳本爲每一個項目定製一個 tmux 環境:建立會話,分割窗口,自動開啓項目要用到的程序等。mysql

使用 tmux 命令建立定製設置

能夠使用 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-mCTRL-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 配置文件設置項目開發環境

.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 管理配置

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 命令

命令 描述
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 命令

命令 描述
tmuxinator open [name] 在默認編輯器中打開或建立一個項目配置文件
tmuxinator [name] 加載並運行該項目配置文件,建立(若是尚未建立)並關聯建立的會話
tmuxinator list 列出當前全部的項目
tmuxinator copy [source] [destination] 複製項目配置文件
tmuxinator delete [name] 刪除項目配置文件
tmuxinator implode 刪除全部當前的項目配置文件
tmuxinator doctor 診斷 tmuxinator 及系統中的配置文件

參考資源:

tmux: Productive Mouse-Free Development

相關文章
相關標籤/搜索