tmux最佳伴侣:tmuxinator

先前的博文介绍过tmux,极大的提高了远程登陆linux server的操作效率。但是tmux在系统重启后,所有的tmux session都会被消除,你分好的window pane, 所有的环境设置都没有了。这对于基本不关机的server问题不大,但是开发者如果想在自己的机器上使用tmux, 就不得不面对怎么在系统重启后恢复tmux session的问题。

tmux的快捷键,状态栏,配色等等都是可配置的,而tmux session却不是通过配置文件建立的,而是通过一系列tmux命令来操作的。可以把一系列的tmux操作写入一个shell脚本,每次运行这个脚本来建立相同的session,这就变相的实现了恢复session的功能。当然这需要用户相当了解tmux的命令并花不少经历维护这个脚本,我一直也没有写出一个顺手的tmux脚本,直到发现了tmuxinator

tmuxinator是一个用ruby写的工具,具体功能就是通过YAML文件配置一个tmux设置,tmuxinator根据配置文件运行相应的tmux命令,建立tmux session。

##tmuxinator的安装和使用
tmuxinator依赖与Ruby, 通过gem安装非常方便。

1
gem install tmuxinator

tmuxinator 需要用户定义用来打开配置文件的editor,在.bashrc中加入
1
export EDITOR='vim'

tmux的窗口编号默认是从0开始的,而在大部分键盘上主键区,数字键都是按1234567890排列的,切换到0号窗口很不方便,可以在~/.tmux.conf中加入如下两行,让tmux的窗口编号从1开始。
1
2
set-option -g base-index 1
set-window-option -g pane-base-index 1

常用tmuxiantor操作如下:
1
2
3
4
5
mux new [PROJECT] # 新建一个project
mux [PROJECT] # 开始一个project配置好的tmux session
mux open [PROJECT] # 编辑一个project配置
mux delete [PROJECT] # 删除一个project
mux list # 列出所有的project

##tmuxinator的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name: Tmuxinator
root: ~/Code/tmuxinator
socket_name: foo # Remove to use default socket
pre: sudo /etc/rc.d/mysqld start # Runs before everything
pre_window: rbenv shell 2.0.0-p247 # Runs in each tab and pane
tmux_options: -v -2 # Pass arguments to tmux
windows:
- 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

tmuxinator配置文件结构很简单,每个session的配置被看做一个project, 根据需要配置好路径,windowns 和panes就可以工作了。

其中panes的layout可以是tmux定义的5种标准的layout:

  • even-horizontal
  • even-vertical
  • main-horizontal
  • main-vertical
  • tiled

你可以也定义自己的layout