上一篇介绍的tmux,存在一个比较严重的问题,当运行tmux server的机器重启后,所有tmux的信息都将失效。我们需要重新开启tmux,分配并调整窗格,每个窗格再开启相关的命令。很麻烦。
本文介绍tmux的好基友Tmuxinator可以根据配置快速创建tmux的session。
Tmuxinator的安装
Tmuxinator基于Ruby,首先安装Ruby。1
# yum install ruby
安装Tmuxinator。1
# gem install tmuxinator
若由于(你懂得的)网络原因无法安装,则更新Ruby的gem源后再次尝试。1
2# gem source -a https://ruby.taobao.org/
# gem source -r https://rubygems.org/
基础设置
将下述文本保存为$HOME/.tmuxinator/.tmuxinator.bash
,提供tab
键提示功能。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
_tmuxinator() {
COMPREPLY=()
local word
word="${COMP_WORDS[COMP_CWORD]}"
if [ "$COMP_CWORD" -eq 1 ]; then
local commands="$(compgen -W "$(tmuxinator commands)" -- "$word")"
local projects="$(compgen -W "$(tmuxinator completions start)" -- "$word")"
COMPREPLY=( $commands $projects )
elif [ "$COMP_CWORD" -eq 2 ]; then
local words
words=("${COMP_WORDS[@]}")
unset words[0]
unset words[$COMP_CWORD]
local completions
completions=$(tmuxinator completions "${words[@]}")
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
fi
}
complete -F _tmuxinator tmuxinator mux
$HOME/.bashrc
下增加下述内容。1
2source $HOME/.tmuxinator/.tmuxinator.bash
export EDITOR='vim'
source $HOME/.bashrc
使其生效。
常用命令
Tmuxinator的一个工程(Project)对应tmux的一个sessiontmuxinator
命令已alias
为mux
。new
简写为n
,open
简写为o
,edit
简写为e
,list
简写为l
,copy
简写为c
,delete
简写为d
。1
2
3
4
5
6
7$ mux n ws # 创建工程ws
$ mux o ws # 打开工程ws的配置文件
$ mux e ws # 同上
$ mux c ws ws1 # 复制ws工程到ws1
$ mux d ws # 删除ws工程
$ mux l # 显示所有工程
$ mux ws # 开启ws工程
配置
当new
一个工程后,会出现如下信息(省略注释)。1
2
3
4
5
6
7
8
9
10
11name: ws # session名称
root: ~/ # 工程根目录,活动Pane会首先cd到此目录
windows:
- editor: # 第1个名为Editor的Window
layout: main-vertical # Pane的布局
panes: # 各个Pane
- vim # 第一个Pane运行vim命令
- guard # 第二个Pane运行guard命令
- server: bundle exec rails s # 第2个名为server的Window,运行命令为bundle
- logs: tail -f log/development.log # 第3个名为logs的Window,运行命令为tail
可以根据注释配置自己的工程。
自定义layout
工程配置中的layout项,有5个默认的值。
- even-horizontal
- even-vertical
- main-horizontal
- main-vertical
- tiled
开启tmux后,可以使用快捷键prefix space
切换layout,建议开启4个Pane进行测试。
其中main-horizontal和main-vertical可以设置默认主Pane的宽度和高度。1
2
3# .tmux.conf
set-window-option -g main-pane-width 100 # 设置主Pane宽度
set-window-option -g main-pane-height 80 # 设置主Pane高度
如果不满足layout默认值,layout项可以自定义值。
首先调整好窗口的Pane,prefix d
关闭Session。1
2$ tmux list-windows
1: bash* (4 panes) [211x47] [layout 9a0a,211x47,0,0{110x47,0,0,12,100x47,111,0[100x23,111,0,13,100x23,111,24{49x23,111,24,14,50x23,161,24,15}]}] @3 (active)
将上述信息之后layout之后的信息(到最后一个]
前),复制到工程配置中的layout项即可。注意pane的个数必须与执行命令的个数对应。1
2
3
4
5
6
7windows:
- editor:
layout: 9a0a,211x47,0,0{110x47,0,0,12,100x47,111,0[100x23,111,0,13,100x23,111,24{49x23,111,24,14,50x23,161,24,15}]}
- # empty
- # empty
- # empty
- # empty
多命令
当某个Pane需要执行多命令时,官方不推荐使用&&
或;
的形式。可以采用如下方式发送命令。1
2
3
4
5
6
7
8windows:
- editor:
layout: main-vertical
panes:
- list: # 多命令方式
- cd ~/temp
- ls -la
- # empty
CentOS6.X手动安装Ruby
2015.08.03新增本章。
上述篇章是在CentOS7安装的,没有问题。CenOS6.X默认安装的Ruby版本太低不符合Tmuxinator的要求,需要手动下载Ruby源码安装,之后在下载安装Tmuxinator。1
2
3
4
5
6
7
8
9# yum remove -y ruby
# yum -y install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel
# wget https://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p598.tar.gz
# tar zxvf ruby-2.0.0-p598.tar.gz && cd ruby-2.0.0-p598
# ./configure --disable-install-doc && make && make install
# cd -
# wget http://production.cf.rubygems.org/rubygems/rubygems-2.0.14.tgz
# tar zxvf rubygems-2.0.14.tgz && cd rubygems-2.0.14
# ruby setup.rb
安装完成后,继续执行第1步。
如果本文对你有所帮助,请小额赞助。
~~ EOF ~~