前言
自从上次埋下了《程序员内功系列–序篇》的坑过后,继续写了《程序员内功系列–iTerm与Zsh篇》,谁知突然之间懒癌又犯了,Tmux篇迟迟没动手写。今日猛然回想起来,半年又过去了,惭愧惭愧。这次还是打算一鼓作气,把剩下的坑都填了吧……
Tmux简介
言归正传,Tmux是一个老牌又经典的终端复用工具,相信命令行的程序员们以及运维同学们都对它赞不绝口。用上了Tmux,仿佛在终端世界为你打开了另外一个窗口…… 不! 其实是另外一堆窗口……好吧,这次,我们就来探究一下Tmux的神奇世界……
提到Tmux,也许不少同学会比较疑惑,跟我平时mac OS下用的iTerm2有啥区别呢?你Tmux有的多个窗口切换,我iTerm2照样有多个Tab来实现类似的功能。其实,不光是窗口,Tmux提供了基于session概念的多终端窗口管理功能。既然有了session,用户就可以随时存储和恢复终端会话。
想象一下某个场景:某个用户开了多个终端窗口SSH登录到远程的服务器上进行运维操作,下班关机回家之后,第二天必须得把所有的终端窗口再重新连接和设置一遍,才能继续昨天的工作。有了session就完全不一样了,下班的时候可以脱离当前session,第二天继续上班,用户随时可以通过命令行恢复上次的会话,这样真是太方便了。所以,使用Tmux的场景大致分为两种:
- 在服务端运行Tmux,方便保存我们的窗口和各种会话
- 在本地终端(例如:iTerm2)运行,方便喜欢我们日常程序开发
这样看来,使用Tmux的好处不言而喻。另外,Tmux还提供了许多强大的功能:
- 提供基于命令行的功能强大的界面。
- 完整的快捷键系统,可以完全脱离鼠标,通过键盘快捷键组合,完成一切你所需要的操作。
- 基于会话的窗口管理理念,多个会话,多个窗口和panel,进行快速而又高效的切换。
- 窗口可以纵向和横向任意分割为多个panel,并实现各种自定义布局,迎合不同用户的需要。
- 支持 UTF-8 编码及 256 色终端。
- 支持插件,通过配置不同插件实现界面可定制化。
其实Tmux的功能还有很多,等着你去逐步发现……
会话、窗口与窗格的概念
Tmux中的主要概念分为三个:
Session - Session是Tmux中最主要的概念了,默认开启Tmux的时候,就会自动新建一个会话,在这个会话中,也会给你开启一个默认的Window(也即窗口)。Tmux中可以拥有多个会话,多个会话之间可以来回无缝切换。
Window - 相比session,Windows是稍微小一点的单位。一个session中,可以开启多个window。这些window同属于一个Session,并由其管理。
Panel - Panel是比Window更小的界面元素。前面我们也提到了Tmux中可以对window进行任意分割,由window分割出来的单位就叫做panel了。在同一个window中,用户可以控制光标在分割出的panel中随意移动,用以选定当前作为激活状态的panel。
如果看了这些概念还不太明白,也许下面这个图可以清晰的表明它们之间的关系:
他们的从属关系为:Session -> Window -> Panel
安装与配置
Tmux的安装也非常方便,通常Ubuntu下安装,使用:
1 | sudo apt-get install tmux |
在mac OS中,推荐使用brew来安装:
1 | brew install tmux |
Tmux简单配置
Tmux在安装完成之后,可以立即启动,不过这还只算一个“裸奔”的Tmux,因为很多配置项都是默认值,需要我们根据自己的喜好进行一些设置。从零开始创建一个Tmux是比较费神的,建议去网上寻找其他大神的配置文件来修改,这样比较快捷一些。这里提供一个我经常使用的Tmux配置文件,可以作为模板,直接下载后按照自己的喜好来更改。
需要注意的是,tmux的配置文件本身是一个隐藏文件,也就是以 .
号开头的文件,叫做 .tmux.conf
。我们需要把这个文件放在当前用户的默认主目录下,也即 ~/.tmux.conf
,tmux启动后,会自动读取和加载里面的配置项。
配置文件就算这么搞定了,如果你是第一次接触Tmux,建议不用太纠结如何弄清楚配置文件里面的每一项是什么意思,在后续的使用中,你可能会不断去修改和调整,自然而然也就熟悉了。接下来,我们要见识一下Tmux强大的各种快捷键功能。
常用快捷键
初次使用Tmux需要明白的是,Tmux的各种快捷键功能,是需要一个<prefix>
组合键作为前缀的。也就是说,需要先按下 <prefix>
组合键,才能激活快捷键功能,然后再按对应各种功能的快捷键,才会生效。之所以这样设计,估计也是为了把快捷键的输入跟用户正常输入区分开来。
初次使用Tmux,我们要知道的是,Tmux为我们默认预备的 <prefix>
组合键,是 C-b
(即Ctrl+b)。当然,根据我们自己的习惯,如果觉得 C-b
按起来不方便,可以通过修改配置文件的方式,自定义自己喜欢的 <prefix>
组合键。比如我就觉得 C-b
距离有点远,于是,我的 <prefix>
是这么定义的:
1 | set -g prefix C-g |
嗯,我把我的 <prefix>
设置为了 Ctrl+g (参考我的配置文件),或许你也能找到自己按起来比较舒适的 <prefix>
组合键。使用Tmux的快捷键,几乎能完成大部分的功能和操作,让你双手几乎不用离开键盘,就可以完成日常的工作,感觉非常的Geek。
这里简单列举一下Tmux的部分快捷键操作,有些快捷键估计跟Tmux默认提供的不太一样,因为我根据自己的喜好进行了一些调整。
窗口(Window)操作
1 | <prefix> c 创建新窗口 |
窗格(Panel)操作
1 | <prefix> | 垂直分割 |
窗格(Panel)选择
1 | <prefix> h 选择左边的窗格 |
参考这里的设置
窗格(Panel)尺寸调整
1 | <prefix> H 当前窗格向左扩大3格 |
另外,打开了这个选项,还能使用鼠标来调整Panel尺寸。
会话(Session)相关
1 | <prefix> :new<回车> 启动新会话 |
这里只是列出了部分Tmux常用快捷键,初学Tmux,千万别被这么多的快捷键给吓住,随着使用Tmux时间的不断增加,这些快捷键最终会变为肌肉的条件反射,所谓的“无剑胜有剑”,嘿嘿。
Tmux使用效果
嗯,待你玩熟了window与panel,Tmux里面你就可以任意创建自己喜欢的终端布局了。下面是我常用的终端布局效果,供大家围观……
- 开发程序时的布局
- 运维与部署程序时的布局
插件系统与常用插件介绍
TPM的安装
跟我们现在常用的很多软件类似,Tmux也支持插件系统,可以通过安装插件扩展出许多功能,让Tmux变得更加强大。在Tmux中,这款插件管理器叫做 TPM - Tmux Plugin Manager。
TPM的安装也比较简单:
1 | $ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm |
然后,修改Tmux配置文件,让其在启动时加载TPM,参考这里
TPM主要提供插件的安装,更新和移除等管理功能:
<prefix> I
安装插件,并更新Tmux<prefix> U
更新所有已安装插件<prefix> Alt U
移除所有插件列表中不存在的插件
常用插件推荐
有了TPM,我们就能够安装和使用各种插件了,这里介绍几款我比较常用的插件:
Tmux Resurrect 一个非常好用的保存当前Tmux窗口和Panel布局的插件。它可以帮助你持久化当前Tmux中所有的窗口和Panel布局。如果你对窗口进行了分割并且精心调整过,在退出Tmux之前可以使用快捷键对布局进行持久化。下一次启动Tmux的时候,也能非常方便的用快捷键恢复上次的窗口布局,真是非常方便。
插件地址:https://github.com/tmux-plugins/tmux-resurrectTmux urlview 在终端界面中自动搜寻所有的URL链接地址,合并为一个可以选择的列表,然后选中直接在浏览器中打开URL。省去了用鼠标复制URL,再打开浏览器粘贴的繁琐操作,非常高效,值得推荐!
插件地址:https://github.com/tmux-plugins/tmux-urlviewTmux open 使用系统中默认文件类型对应的程序,快速打开在终端中选中的文件名。这个也非常高效,值得推荐! 插件地址:https://github.com/tmux-plugins/tmux-open
Tmux-Battery 和 Tmux-CPU 这两个插件也值得推荐,安装好后,能在Tmux右下角显示当前机器的电量和CPU占用百分比,能给Tmux增色不少。
插件地址: https://github.com/tmux-plugins/tmux-battery https://github.com/tmux-plugins/tmux-cpu
总结
Tmux真是终端下的利器,在macOS下,配合iTerm2和Vim,能轻松的打造出高效的开发环境。在服务端运行Tmux,也能为你日常运维工作带来许多便利。所以,将Tmux大法谨记心中,他日必能为君带来极大的便利和效率。