Tmux 學習摘要3--使用腳本定制 tmux 環(huán)境

使用腳本為每個項目定制一個 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-mCTRL-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)中的配置文件

參考資源:

tmux: Productive Mouse-Free Development

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胰蝠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震蒋,更是在濱河造成了極大的恐慌茸塞,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件查剖,死亡現(xiàn)場離奇詭異钾虐,居然都是意外死亡,警方通過查閱死者的電腦和手機笋庄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門效扫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人直砂,你說我怎么就攤上這事菌仁。” “怎么了哆键?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵掘托,是天一觀的道長。 經(jīng)常有香客問我籍嘹,道長闪盔,這世上最難降的妖魔是什么弯院? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮泪掀,結果婚禮上听绳,老公的妹妹穿的比我還像新娘。我一直安慰自己异赫,他們只是感情好椅挣,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著塔拳,像睡著了一般鼠证。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上靠抑,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天量九,我揣著相機與錄音,去河邊找鬼颂碧。 笑死荠列,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的载城。 我是一名探鬼主播肌似,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诉瓦!你這毒婦竟也來了川队?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤睬澡,失蹤者是張志新(化名)和其女友劉穎呼寸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猴贰,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡对雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了米绕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑟捣。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖栅干,靈堂內(nèi)的尸體忽然破棺而出迈套,到底是詐尸還是另有隱情,我是刑警寧澤碱鳞,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布桑李,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贵白。R本人自食惡果不足惜率拒,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禁荒。 院中可真熱鬧猬膨,春花似錦、人聲如沸呛伴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽热康。三九已至沛申,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姐军,已是汗流浹背污它。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庶弃,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓德澈,卻偏偏與公主長得像歇攻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梆造,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容