之前在中期学习计划中将tmux列入其中,但是一直没有花时间研究。周末看番的时候有一个tmux的视频推荐 ,点开看了一下觉得讲的挺好的,感觉是时候在工作中导入这个工具了。视频也直接嵌在正文中,有需要的朋友不妨看一下。
开胃菜
视频开头的动画up主讲到这个软件名字叫asciiquarium, 可以通过brew install asciiquarium命令来安装。其实没什么太大作用,就是终端中的一个动画,当作终端的屏保也不错。
q 退出动画
p 暂停动画
r 重置动画
tmux介绍
Tmux是一个键盘驱动的终端分屏工具,可以替代Linux下的screen。当然,如果是在Mac下使用的话,它的核心功能(例如window,分屏等)也是可以被iTerm2替代的,不过好在Tmux在*nix操作系统中足够通用,用包管理工具(apt-get, brew等)即可安装,所以了解并熟练使用它,还是能为平时终端下的工作节省不少时间的。而且最重要的功能是它可以保存会话,避免每次开机都得重复性的去开各种窗口。
session
会话,Tmux是一个C/S架构的工具,一个会话可以认为是C端和S端一次交互的上下文。我们的所有操作都属于某个session,session可以长时间存在,也可以临时退出再重进。我们可用通过session来区分不同的工作空间,比如本地操作开一个session,远程SSH操作开一个session,又或者SSH生产环境机器开一个session,SSH测试环境机器开一个session。
新建会话
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
使用编号区分会话,不太直观,更好的方法是为会话起名。
1$ tmux new -s <session-name>
上面命令新建一个指定名称的会话。
分离会话
在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
1$ tmux detach
上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。
tmux ls命令可以查看当前所有的 Tmux 会话。
1 2 3$ tmux ls # or $ tmux list-session
接入会话
tmux attach命令用于重新接入某个已存在的会话。
1 2 3 4 5# 使用会话编号 $ tmux attach -t 0 # 使用会话名称 $ tmux attach -t <session-name>
杀死会话
tmux kill-session命令用于杀死某个会话。
1 2 3 4 5# 使用会话编号 $ tmux kill-session -t 0 # 使用会话名称 $ tmux kill-session -t <session-name>
切换会话
tmux switch命令用于切换会话。
1 2 3 4 5# 使用会话编号 $ tmux switch -t 0 # 使用会话名称 $ tmux switch -t <session-name>
重命名会话
tmux rename-session命令用于重命名会话。
1$ tmux rename-session -t <now-name> <new-name>
上面命令可以将会话重命名。
会话(Session)快捷键
Ctrl+b d:分离当前会话。
Ctrl+b s:列出所有会话。
Ctrl+b $:重命名当前会话。
window
如果说session是个不可见的东西,那么window就是我们输入、执行命令的地方。一个session可以包含多个window。把window类比成iTerm2中的标签应该就理解了。在创建session的时候默认会创建一个以"数字下标+bash"命名的window,并且名称随着bash中执行的不同命令而变化。在新建session时可以通过-n参数指定默认打开的window名称,比如通过 tmux new -s basic -n win 命名一个win名称的window。也可以随时通过 Prefix+, 来修改window名称。
tmux new-window命令用来创建新窗口。
1 2 3 4$ tmux new-window # 新建一个指定名称的窗口 $ tmux new-window -n <window-name>
切换窗口
tmux select-window命令用来切换窗口,也可以用按下前置快捷键 ctrl+b ,然后按数字键切换。
1 2 3 4 5# 切换到指定编号的窗口 $ tmux select-window -t <window-number> # 切换到指定名称的窗口 $ tmux select-window -t <window-name>
重命名窗口
tmux rename-window命令用于为当前窗口起名(或重命名),也可以按下前置快捷键ctrl+b,然后按,。
1$ tmux rename-window <new-name>
窗口(Window)快捷键
下面是一些窗口操作的快捷键。
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b w:从列表中选择窗口。(强烈推荐:它可以跨session选择所有的window)
Ctrl+b ,:窗口重命名。
Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号。
Pane
一个window可以切割成多个pane,也就是所谓的分屏,算是Tmux的核心功能之一。
划分窗格
tmux split-window命令用来划分窗格。
1 2 3 4 5# 划分上下两个窗格 快捷键 Ctrl+b " $ tmux split-window # 划分左右两个窗格 快捷键 Ctrl+b % $ tmux split-window -h
移动光标
tmux select-pane命令用来移动光标位置, 也可以按下前置快捷键 ctrl+b,然后按方向键切换。
1 2 3 4 5 6 7 8 9 10 11# 光标切换到上方窗格 $ tmux select-pane -U # 光标切换到下方窗格 $ tmux select-pane -D # 光标切换到左边窗格 $ tmux select-pane -L # 光标切换到右边窗格 $ tmux select-pane -R
交换窗格位置
tmux swap-pane命令用来交换窗格位置。
1 2 3 4 5# 当前窗格上移 $ tmux swap-pane -U # 当前窗格下移 $ tmux swap-pane -D
窗格(Pane)快捷键
下面是一些窗格操作的快捷键,窗格相关的快捷键比较多,毕竟是我们主要的工作区,但是实际用的非常频繁的并不多。
Ctrl+b %:划分左右两个窗格。
Ctrl+b ":划分上下两个窗格。
Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。
Ctrl+b x:关闭当前窗格。
Ctrl+b ;:光标切换到上一个窗格。
Ctrl+b o:光标切换到下一个窗格。
Ctrl+b {:当前窗格与上一个窗格交换位置。
Ctrl+b }:当前窗格与下一个窗格交换位置。
Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。
Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。
Ctrl+b !:将当前窗格拆分为一个独立窗口。
Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。
Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。
Ctrl+b q:显示窗格编号。
安装tmux
|  |  | 
配置tmux
|  |  | 
做完以上配置后就有了和up演示中一样的功能。
前缀键
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。
举例来说,帮助命令的快捷键是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就会显示帮助信息。
然后,按下 ESC 键或q键,就可以退出帮助。
tmux帮助命令
|  |  | 
tmux快捷键汇总
| Ctrl+b | 激活控制台;此时以下按键生效 | |
|---|---|---|
| 系统操作 | ? | 列出所有快捷键;按q返回 | 
| d | 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话 | |
| D | 选择要脱离的会话;在同时开启了多个会话时使用 | |
| Ctrl+z | 挂起当前会话 | |
| r | 强制重绘未脱离的会话 | |
| s | 选择并切换会话;在同时开启了多个会话时使用 | |
| : | 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器 | |
| [ | 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出 | |
| ~ | 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息 | |
| 窗口操作 | c | 创建新窗口 | 
| & | 关闭当前窗口 | |
| 数字键 | 切换至指定窗口 | |
| p | 切换至上一窗口 | |
| n | 切换至下一窗口 | |
| l | 在前后两个窗口间互相切换 | |
| w | 通过窗口列表切换窗口 | |
| , | 重命名当前窗口;这样便于识别 | |
| . | 修改当前窗口编号;相当于窗口重新排序 | |
| f | 在所有窗口中查找指定文本 | |
| 面板操作 | ” | 将当前面板平分为上下两块 | 
| % | 将当前面板平分为左右两块 | |
| x | 关闭当前面板 | |
| ! | 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板 | |
| Ctrl+方向键 | 以1个单元格为单位移动边缘以调整当前面板大小 | |
| Alt+方向键 | 以5个单元格为单位移动边缘以调整当前面板大小 | |
| Space | 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled | |
| q | 显示面板编号 | |
| o | 在当前窗口中选择下一面板 | |
| 方向键 | 移动光标以选择面板 | |
| { | 向前置换当前面板 | |
| } | 向后置换当前面板 | |
| Alt+o | 逆时针旋转当前窗口的面板 | |
| Ctrl+o | 顺时针旋转当前窗口的面板 | 
