tmux 是一个终端多路复用器:它允许从单个屏幕创建、访问和控制多个终端。 tmux 可能会与屏幕分离并继续在后台运行,然后重新连接。
第一次看到tmux
的介绍的时候,我其实没什么感觉,觉得没什么.后面用terminal多了,遇到了一些问题,然后尝试解决。最后我重新认真学习了tmux
。它改变了我电脑的习惯。
本文将会花十分钟介绍,tmux 的基本使用场景。
回忆一下,你日常工作时候使用terminal 的场景,打开一个 Iterm2
窗口,然后使用ssh 连接一台远程机器,然后进入特定目录,开始工作,完成工作后,关闭Iterm2
窗口。上面这些步骤,就是一个 terminal session 它的生命周期是跟 terminal 的生命周期绑定在一起的,关闭窗口后session就结束,然后下次我们要工作的时候,就重复上面的步骤。
有什么办法,可以将session跟terminal 开来,下次再操作的时候,就不需要重复上面的步骤? tmux可以帮助我们实现这个功能。
我们看看再 tmux 下如何实现上面这个功能把。
在这个演示中:
tmux new -s test
创建了一个tmux session ,然后打开一个目录,tmux attach-session
回到原来的目录,跟刚才退出去的时候一模一样。这就是 tmux 基础的应用了,剥离session,并且保持session 状态。
tmux 可以帮助我们实现:
在Mac上,可以使用brew 来安装 tmux
brew install tmux
其他环境请参考:Installing tmux[1]
安装完成后, 在 terminal中输入 tmux
就可以启动一个 tmux session 。输入exit 就会退出 tmux session ,返回到原来的 terminal 页面。
跟其他软件不一样的是: tmux 中所有的快捷键都需要和前缀快捷键 ⌃b
来组合使用(注:⌃
为 Mac 的 control 键),这样其实挺好的,减少了与其他软件冲突的概率。可以通过 ⌃b+?
来查询所有的快捷键。一般把tmux 的快捷键分成三类:窗口管理、窗格管理、以及session 管理。
如果运行了多次 tmux
命令则会开启多个 tmux 会话(session)。在 tmux 会话中,使用前缀快捷键 ⌃b
配合以下快捷键可操作会话:
⌃b + $
重命名当前会话⌃b + s
选择会话列表⌃b + d
detach 当前会话,运行后将会退出 tmux 进程,返回至 terminal 主页面。
在 terminal 中,可以这样操作 sessionalias tnew='tmux new -s' # 新建一个会话
alias tls='tmux ls'
alias td='tmux detach' # 分离 会话,会保存分离之前的状态
alias ta='tmux attach -t' # 连接会话
alias tkss='tmux kill-session -t'
Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。
⌃b + %
左右平分出两个窗格⌃b + "
上下平分出两个窗格⌃b + x
关闭当前窗格⌃b + {
当前窗格前移⌃b + }
当前窗格后移⌃b + ;
选择上次使用的窗格⌃b + o
选择下一个窗格,也可以使用上下左右方向键来选择⌃b + space
切换窗格布局,tmux 内置了五种窗格布局,也可以通过 ⌥1
至 ⌥5
来切换⌃b + z
最大化当前窗格,再次执行可恢复原来大小⌃b + q
显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格tmux 还有窗口(window) 的概念,当窗格变得拥挤的时候,我们可以再开一个窗口,下面是窗口一些常用的快捷键。
⌃b + c
新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态⌃b + p
切换至上一窗口⌃b + n
切换至下一窗口⌃b + w
窗口列表选择,注意 macOS 下使用 ⌃p
和 ⌃n
进行上下选择⌃b + &
关闭当前窗口⌃b + ,
重命名窗口,可以使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 id⌃b + 0
切换至 0 号窗口,使用其他数字 id 切换至对应窗口。⌃b + f
根据窗口名搜索选择窗口,可模糊匹配。这篇文章只是总结了一下tmux 的基本使用以及快捷键,还有很多应用场景没有涉及。比如跟vim 配合如何更加高效地在 vim中写代码。希望看过这篇文章的朋友,能够上手体验一下tmux
, 使用tmux 生产力。
[1]Installing tmux: https://github.com/tmux/tmux/wiki/Installing