tmux主要的功能有两点:
- 终端利用,可以在一个terminal开启多个shell的session,这样就不需要vim一个terminal,命令又要需要一个,其他服务还要再开一个了。
- 断线保证任务在后台继续执行,以及当你上线后保证原来打开的多个窗口与断线之前完全一样。以后就不用再使用screen了
两个功能都非常棒,值得花点时间学习,分分钟就能掌握基本应用。tmux中有三个最基本的概念: 会话(session)、窗口(window)、窗格(Pane)
当开启tmux后,它首先会创建一个会话,在会话中会首先创建一个窗口,窗口中会创建一个面板,一个面板就可以当成一个我们可以使用的shell窗口。
下面会混用窗格和面板,都指pane
tmux使用C/S模型,主要包含以下模块:
- server服务器。输入tmux命令时就开启了一个服务器。
- session会话。一个服务器可以包含多个会话
- window窗口。一个会话可以包含多个窗口。
- pane面板。一个窗口可以包含多个面板。
基本应用
启动tmux
安装后在命令行输入tmux就启动了,看到只有一个窗口,窗口下方会有基本状态信息。tmux的使用可以完全靠快捷键,快捷键以前缀快捷键+快捷键构成,默认的前缀(prefix)快捷键是ctrl-b,用法是按下Ctrl-b,放开后再按下相应的快键即可,例如查看tmux会话的快捷键是s,可以按下ctrl-b,放开再按s,即可查看当前的所有会话。
知道怎么按快捷键也就会有tmux了,下面试一下纵向分隔窗口的快捷键:
1 | prefix % |
横向分隔窗口:
1 | prefix " |
窗口间切换prefix <相应方向键>
这样你就可以在一个terminal中即开多个vim,又进行其他操作了。
希望这些切换可以像vim的快捷键一样?看后面的配置
退出或关闭tmux
当要退出tmux时可以使用exit,这样会关闭当前的tmux面板,当所有面板关闭时也就退出了窗口。
如果要让它在后台运行,你要先回到普通的terminal,使用快捷键prefix &。
想再回来,比如断线重连时,可以使用tmux attach,或者直接tmux a,可以可看其常用命令获取更多内容。
要关闭整个tmux服务的话使用tmux kill-server
查看版本:tmux -V
会话相关命令tmux new -s [session_name] 创新新会话tmux new -s [session_name] -d 在后台建立会话tmux ls 列出会话tmux attach -t [session_name] 进入某个会话
或者在tmux中使用命令prefix :new-session新一个会话
复制面板中的内容
prefix [进入复制模式- 按
space开始复制,移动光标选择复制区域 - 按
Enter复制并退出复制模式。 - 将光标移动到指定位置,按
prefix ]粘贴
常用快捷键
注意窗格是指Pane,窗口是指window
C-b ?显示快捷键帮助C-b :进入命令模式C-b C-z挂起会话,不影响其他命令的运行C-b C-o调换窗格位置,类似与vim 里的C-wC-b 空格键采用下一个内置布局C-b !把当前窗格(pane)变为新窗口(window)C-b "横向分隔窗格C-b %纵向分隔窗格C-b q显示分隔窗格的编号C-b o跳到下一个分隔窗格C-b 上下键上一个及下一个分隔窗格C-b C-方向键调整分隔窗格大小,注意C表示Ctrl键C-b z最大化当前窗格,再一次则恢复C-b c创建新窗口C-b 0~9选择几号窗口C-b n选择下一个窗口C-b p选择前一个窗口C-b l切换到前一个窗口,该快捷键通常会被重定义为符合vim下的空格切换C-b w以菜单方式显示及选择窗口C-b s以菜单方式显示和选择会话C-b t显示时钟C-b ;切换到最后一个使用的面板C-b x关闭面板C-b &关闭窗口C-b d退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话
tmux中很多需要移动光标的地方都支持vim的i,j,k,h,可以自行试试
配置
为了让tmux更加好用,就像vim一样,我们需要进行一些个性化的配置。tmux的系统级配置文件在/etc/tmux.conf,用户级配置文件可以放在~/.tmux.conf
下面给出一份我自己在使用的,主要是针对vim的使用习惯进行了一些键绑定,增加了2个插件,功能内容都有注释:
1 | # rebind prefix key |
修改完配置文件之后可以在tmux中按快捷键Ctrl-b :进入命令模式,输入source-file ~/.tmux.conf,使其生效。经过上述配置文件之后,以后修改完配置文件直接使用Ctrl-b r就可以重新加载新配置文件了。
如果是在terminal中,使用命令tmux source-file ~/.tmux.conf使配置生效。
插件
这里主要推荐4个插件,确切来说是2组。
tpm
用于管理tmux插件,类似与vim下的vundle
地址:https://github.com/tmux-plugins/tpm
tmux-sensible
一些tmux的基本配置,适合几乎所有人,可以看一下它的配置内容
地址:https://github.com/tmux-plugins/tmux-sensible
tmux-resurrect
用户保存和恢复tmux的运行环境,非常好用,当你需要对当前你打开的tmux的会话、窗口、空格以及其位置保存时,直接按快捷键prefix Ctrl-s即可保存,需要恢复时是prefix Ctrl-r。
地址:https://github.com/tmux-plugins/tmux-resurrect
tmux-continuum
可以用于配合tmux-recurrect,它会自动化地帮你保存和恢复
地址:https://github.com/tmux-plugins/tmux-continuum
其他问题
会话的命令行操作
| 命令 | 功能 |
|---|---|
tmux ls |
# 显示所有会话 |
tmux new -s <session-name> |
#新建会话,并指定会话名 |
tmux new |
# 新建会话,会话名自动为数字序号 |
tmux a |
# 接入上一个会话 |
tmux a -t <session-name> |
# 接入指定会话 |
tmux detach |
# 断开当前会话,等价于ctrl+b d |
tmux kill-session -t <session-name> |
# 关闭指定会话 |
tmux kill-session -a -t <session-name> |
#关闭除指定会话外的其他所有会话 |
tmux kill-server |
# 销毁所有会话并停止tmux |
参考
- tmux使用及个性化配置
- [StackOverFlow]
- [man tmux]