Linux进阶02:tmux好基友Tmuxinator

上一篇介绍的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
#!/usr/bin/env bash

_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
2
source $HOME/.tmuxinator/.tmuxinator.bash
export EDITOR='vim'

source $HOME/.bashrc使其生效。

常用命令

Tmuxinator的一个工程(Project)对应tmux的一个session
tmuxinator命令已aliasmux
new简写为nopen简写为oedit简写为elist简写为lcopy简写为cdelete简写为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
11
name: 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
7
windows:
- 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
8
windows:
- 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 ~~