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

参考文章

tmux进阶之tmuxinator的更多相关文章

  1. 安利一个神器:Tmux

    对于程序员来说,一个好用且高效的软件工具就如同加持了神技的游戏角色.下面就给大家介绍一个神器 Tmux 以及个人的使用总结. 一.我所认识的 Tmux 在工作中,我把 tmux 当作终端会话管理器来使 ...

  2. 打造高效前端工作环境 - tmux

    打造高效前端工作环境 - tmux 前言  现在前端开发可不容易啊,先打开个VIM,然后再打开个lite-server,一不小心写个ES2015还要打开个gulp来做预编译,如果能把这么多个窗口放在一 ...

  3. 打造高效前端工作环境-tmuxinator

    前言  虽然tmux能让我们方便组织工作环境,但每次重新打开会话时都需要手动重新创建窗口.窗格和执行各种程序,能不能像VS那样以工程为单位保存窗口.窗格和各种所需执行的程序的信息呢?tmuxinato ...

  4. [转载] Tmux 速成教程:技巧和调整

    原文: http://blog.jobbole.com/87584/ 决定从 screen 转向 tmux 了, 非常喜欢 tmux 的窗格功能. 简介 有些开发者经常要使用终端控制台工作,导致最终打 ...

  5. Tmux 使用教程 on Fedora 28

    Tmux 和 gun/screen 都是优秀的终端复用软件,它的关键的好处就是,保持ssh 登录连接session不中断,并且能支持分屏操作,具备丰富的命令行参数,可以进行动态布局和操作.可以看作为s ...

  6. Linux终端复用工具 tmux

    简介 Terminal Multiplexer (From WIKIPEDIA) - A terminal multiplexer is a software application that can ...

  7. Linux tmux

    一.简介 Tmux是一个用于终端复用的软件,它允许一个用户在一个终端窗口或远程终端会话中使用多个不同的终端会话.在同一个命令行接口处理多个程序,以及将程序从已经开始运行另外的程序的Unix shell ...

  8. Tmux 速成教程:技巧和调整

    本文转自:http://blog.jobbole.com/87584/ 简介 有些开发者经常要使用终端控制台工作,导致最终打开了过多的标签页.如果你也是他们当中的一员,或者你正在实践结对编程,那么我推 ...

  9. linux下的终端利器----tmux

    转:tmux 是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件.类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远 ...

随机推荐

  1. MyEclipse 显示行标

    方法一:在行的显示行标位置(行前),右键->Show Line numbers 方法二:Window->preferences->General->editor->tex ...

  2. YII 1.0 小功能总结

    1.操作成功提示 只能使用一次,getFlash()取值以后,值就删除了 控制器中: Yii::app()->user->setFlash('success','修改成功'); 视图中: ...

  3. C#中如何使用IComparable<T>与IComparer<T>接口(转载)

    本分步指南描述如何使用两个接口: IComparer和IComparable.在同一篇文章中讨论这些接口有两个原因.经常在一起,使用这些接口和接口类似 (并且有相似的名称),尽管它们用于不同用途. 如 ...

  4. docker的资源限制cpuset cpuquota memory

    总结 目前,公司7u已经不再使用lxc,转而使用libcontainer 即native docker对cpuquota的支持目前是有问题的,一般大家使用docker的时候,主要是对memory,cp ...

  5. oracle存储过程中文乱码问题

    设置环境变量,新建变量,设置变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK word哥,还是不行呀: 参考:http://idata.blog.5 ...

  6. ASP.NET 页面之间传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  7. 30万奖金!还带你奔赴加拿大相约KDD!?阿里聚安全算法挑战赛带你飞起!

    KDD(Knowledge Discovery and Data Mining,知识发现与数据挖掘)会议,作为数据挖掘届的顶会,一直是算法爱好者心中的圣地麦加. 想去?有点难. ​ 给你奖金和差旅赞助 ...

  8. linux系统下find删除目录下除一文件外的所有文件

    /data/目录下有a.txt b.txt c.txt d.txt删除/data/目录下所有文件,保留b.txt两种方法:1.[root@xuegod62 ~]# find /data/ -type ...

  9. 《HelloGitHub月刊》第10期

    前言 这一年感谢大家的支持,小弟这里给大家拜年了! <HelloGitHub月刊>会一直做下去,欢迎大家加入进来提供更多的好的项目. 最后,祝愿大家:鸡年大吉- <HelloGitH ...

  10. SQLite:自学笔记(1)——快速入门

    SQLite的安装和入门 了解 啥是SQLite? SQLite是一种轻巧迷你的关系型数据库管理系统.它的特点如下: 不需要一个单独的服务器进程或操作的系统(无服务器的). SQLite 不需要配置, ...