tmux进阶之tmuxinator
作者:crane-yuan 日期:2017-03-03
前言
tmuxinator是tmux的配置管理工具,解决了tmux服务器关机后session丢失问题。tmuxinator可以根据配置文件快速创建tmux的session。
Tmuxinator的安装
Tmuxinator基于Ruby,首先安装Ruby
Ubuntu用户可以用apt-get命令安装:
> apt-get install ruby
ArchLinux用户可以用pacman命令安装:
> pacman -S ruby
安装Tmuxinator
若由于(你懂得的)网络原因无法安装,则更新Ruby的gem源后再次尝试。
> gem source -a https://ruby.taobao.org/
> gem source -r https://rubygems.org/
安装tmuxinator
> gem install tmuxinator
基础设置
bash版
将下述文本保存为$HOME/.tmuxinator/.tmuxinator.bash,提供bash的tab键提示功能
#!/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下增加下述内容:
source $HOME/.tmuxinator/.tmuxinator.bash
export EDITOR='vim'
source $HOME/.bashrc使其生效。
zsh版
将下述文本保存为$HOME/.tmuxinator/.tmuxinator.zsh,提供zsh的tab键提示功能
_tmuxinator() {
local commands projects
commands=(${(f)"$(tmuxinator commands zsh)"})
projects=(${(f)"$(tmuxinator completions start)"})
if (( CURRENT == 2 )); then
_describe -t commands "tmuxinator subcommands" commands
_describe -t projects "tmuxinator projects" projects
elif (( CURRENT == 3)); then
case $words[2] in
copy|debug|delete|open|start)
_arguments '*:projects:($projects)'
;;
esac
fi
return
}
$HOME/.zshrc下增加下述内容:
source $HOME/.tmuxinator/.tmuxinator.zsh
export EDITOR='vim'
source $HOME/.zshrc使其生效。
常用命令
Tmuxinator的一个工程(Project)对应tmux的一个session。
tmuxinator命令已alias为mux。
new简写为n,open简写为o,edit简写为e,list简写为l,copy简写为c,delete简写为d。
> 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一个工程后,会出现如下信息(省略注释)。
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进行测试。
下面简单演示下这5个默认布局的样式,面板配置如下:
panes:
- top
- top
- vim .
- vim .
even-horizontal
even-vertical
main-horizontal
main-vertical
tiled
其中main-horizontal和main-vertical可以设置默认主Pane的宽度和高度。
在$HOME/.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。
> 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的个数必须与执行命令的个数对应。
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需要执行多命令时,官方不推荐使用&&或;的形式。可以采用如下方式发送命令。
windows:
- editor:
layout: main-vertical
panes:
- list: # 多命令方式
- cd ~/temp
- ls -la
- # empty