之前在中期学习计划中将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 | 顺时针旋转当前窗口的面板 |