原文地址:https://blog.bugsnag.com/benefits-of-using-tmux/
在我使用tmux之前我经常听别人提起它。当时网上并没有太多关于tmux的信息,所以虽然这个工具听起来很酷,但我并不知道它将如何给我的工作带来神奇的改变。现在我使用tmux已经有几年了,并依靠他将我的各个开发工作结合在一起。多亏了他,我的工作流程现在有条理,自动化,并且可定制。我希望通过说几个tmux如何帮助我的具体例子,来让帮助大家理解他如何让我们玩转工作。
这篇文章将会默认读者熟悉tmux的术语,例如session,pane和window。tmux的window功能很想终端的tab,session则是一些相关window的集合,每个window则可以被水平或者竖直地分为多个pane。每个pane都是相互独立的终端,执行你的dotfiles,管理独立的环境变量以及其他。想了解更多相关介绍,这篇文章可以让你更快入门。
少丢东西
我们都有过这样的经历,不小心点到键盘或者鼠标把当前的终端窗口关掉了,里面的开发服务,文本编辑器,ssh会话和打印信息什么的都随之而去。
最好的情况是,关掉的终端只是一个镜像的复制,最差的情况则是这个终端是一些列场景切换而来的,你必须要一步一步重新回到刚才的环境。
在使用tmux时你可以在不丢失session的任何状态下离开他。这意味着如果你突然关闭了你的终端他也并不会丢失状态,你只需要寻行tmux并重新连接刚才的session就可以回到之前的工作环境。
这虽然不是什么神级的便利,但是他在这几年中帮我节省了很多时间。如果你的开发工作中严重依赖终端,那么这个功能就已经足够吸引你来尝试tmux了。
自动开发环境创建
在我使用tmux之前,每次当我需要一个本地的开发环境时我都需要重复下列步骤:
- 打开终端
- cd到指定目录
- 打开文本编辑器
- 开始输入
- 开始构建或者编译
- 开启其他一些服务
- 准备写入日志文件
现在想起来,我在这些步骤上重复了太多次。是用tmux则可以让我自动创建一个自定义的终端开发环境。tmux的session是可以完全脚本化的,这意味着你可以创建自己的脚本来定制如何打开终端到指定的状态来开始你的工程。
现在开始任意一个工程的开发对来说都只需要一行命令。如果你同时在多个工程工作,并且需要来回切换的话,这非常游泳。
下列图片将会展示使用一行tmuxp命令来启动整个rails的开发环境:编辑器,调试命令行哟你与运行git命令和测试,一个本地运行的web服务以及一个REPL。
小结上面提到的快速启动开发环境便利:
- 减少环境切换的开销
- 开发流程更加有组织
- 减少整理窗口和标签的时间
定位终端标签的分布
脚本化各个工程的开发环境的最大好处是加强了组织。终端是我工作的核心部分,从文本编辑到运行测试,从git到ssh,各种事情都需要在终端上进行。虽然我总是会在一开始知道什么进程跑在哪个终端,但是每次环境切换,运行一次性的任务,都会使我的终端环境变得更加散乱。久而久之,就会发现我那成堆增长的标签和窗口。那么问题来了:
“哪个才是ssh登录的窗口?”
“那5个‘bash’窗口哪个才是我刚才执行命令的?”
编码习惯
让我们重新整理一下思路。再次感谢tmux提供的脚本功能,让我可以快速自动化进入开发环境。如果我发现我的窗口管理有些失控了(比如我开了很多一次性任务的窗口),我可以关掉整个tmux的session,然后重启一个新的。
如何使用tmux来保持窗口的秩序井然这完全取决于使用者。我倾向与每个工程都使用独立的session。对于每个我正在开发的工程,我都编写了对应的启动脚本,并都以下列形式组织每个session:
- 第一个window:编辑器(左边的pane),shell(右边的脚本,用于执行测试和git命令)
- 第二个window: 服务端进程
- 第三个window:其他进程和任务
- 其他window:另外一些需要执行的工作。
减少自动化的成本
养成将tmux的session编写成脚本的习惯是tmux的精髓。自动化是个好东西,但是需要保证新增一个工程时不需要花太多力气来配置新的脚本。我们的目标是让新建一个session脚本和手动开启一个新session一样简单。
如果你愿意的话,可以用tmux命令来写一个shell脚本,这样你就不用手动调用tmux的new-session,send-keys,new-window等等。需要快速了解tmux的脚本编写方法的话,我建议读这本《tmux: Productive Mouse-Free Development》书。另外,我强烈建议使用上手类似与tmuxinator 或 tmuxp这样的工具,他们可以瞬间简化tmux的session管理方法,让编写工作环境启动的脚本迅速成为你的习惯。
更少的环境切换开销
使用tmux来管理所有工程的开发环境,这意味着进入开发环境只需要一行命令,甚至在整个系统重启之后也可以一键返回。
如果你像我一样总是在不同的代码环境之间切换,tmux的<prefix>命令就会非常游泳。他可以让你建立很多session,并且快速在session之间切换并且不需要使用鼠标。几个按键就能让你切换到另一个不同的代码环境。
最后几点
本文提到的tmux优点仅仅是入门级的。你越是以来终端来开发,就越会发现tmux这样的工具非常有用。不论你是否决定尝试tmux,你都应该想一想我们刚才所讨论的是否是一种优化,这将有助于你工作流程的提升。