Tmuxinator - 轻松管理复杂 tmux 会话

重度依赖 tmux 的朋友可能会有这样的一个问题, 每次重新打开 tmux, 都需要重新手动创建 window, pane, 并运行各种程序, tmuxinator 就是为了解决这个问题而诞生的。

项目地址: https://github.com/tmuxinator/tmuxinator

tmux 的版本建议 >= 1.8, 否则可能会出现诡异的错误

我的 tmuxinator 配置: https://github.com/AnyISalIn/hacker_files/tree/master/tmuxinator

Demo

快速配置工作环境

demo

安装

tmuxinator 是 ruby 的一个 gem 包, 首先要安装 gem

$ apt-get install gem	# ubuntu
$ yum install -y rubygems # centos/rhel

通过 gem 来安装 tmuxinator

$ gem install tmuxinator

配置

tmuxinator 通过 yaml 格式的配置文件来定义一个 project

$ tmuxinator new demo #通过 new demo 命令来创建一个 demo 配置文件
$ cat ~/.tmuxinator/demo.yml

# ~/.tmuxinator/demo.yml
name: demo #tmux 会话名称
root: ~/ #全局根目录

windows:
- editor: #window 名称
layout: main-vertical #布局方式
panes:
- vim #pane 执行的命令
- guard
- server: bundle exec rails s #window没有多个pane, 执行的命令
- logs: tail -f log/development.log

通过 ls 命令可以列出所有的 project

$ tmuxinator ls
tmuxinator projects:
demo flask hexo work

可以通过 edit 命令编辑指定的 project, 但是得先指定 $EDITOR 环境变量

$ export EDITOR='vim'
$ tmuxinator edit demo

自定义 project

默认的 project 肯定无法满足我们的需求, 我们需要自己定义 project, 首先我们需要了解 tmuxinator 配置文件中的选项

name: custom_tmux #默认会话名称
root: ~/codes/flask-blog #全局根目录

socket_name: foo # tmux socket 名称
pre: systemctl start mysqld # 启动项目前运行的命令
pre_window: pyenv local 3.5.3 # 启动 window 前运行的命令
tmux_options: -f ~/.tmux.conf.local # tmux 运行的参数
tmux_command: byobu # 调用 tmux 的命令, 适用于 tmux 的衍生品/封装
startup_window: logs # 启动时所在的 window

windows: # 定义所有的window
- editor: # window 名称
root: ~/ # 可以单独为 window 指定目录
layout: main-vertical # 布局
panes:
- vim # 命令
- guard
- server: python manage.py runserver
- logs: tail -f log/flask.log

传递变量

通过上面的配置虽然可以实现功能, 但是并不够通用, 如果项目的目录变了, 那就得重新修改项目配置文件

位置参数

$ tmuxinator project /var/www/foo
name: project
root: <%= @args[0] %> # 根目录通过 arg1 传入

键值参数

$ tmuxinator project2 workspace=/var/www/foo2
name: project2
root: <%= @settings["workspace"] %>

Flask 项目配置示例

# ~/.tmuxinator/flask.yml

name: flask-dev
root: <%= @args[0] %>

windows:
- debug:
layout: even-horizontal
panes:
- vim
- ipython
- server: python manage.py runserver

启动

我们可以通过 start 命令来启动一个 project

$ tmuxinator start flask ~/codes/flask-blog

但是需要注意一个问题, 如果一个 window 中有多个 pane 的情况下, tmux 需要增加以下两条参数, 不然无法正常执行命令

set -g base-index 1
set -g pane-base-index 1