我的tmux之旅(tmux使用详解)

我的tmux之旅(tmux使用详解)

之前在中期学习计划中将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

1
2
3
4
5
6
7
8
# Ubuntu 或 Debian
$ sudo apt-get install tmux

# CentOS 或 Fedora
$ sudo yum install tmux

# Mac
$ brew install tmux

配置tmux

1
2
3
4
 cd
 git clone https://github.com/gpakosz/.tmux.git
 ln -s -f .tmux/.tmux.conf
 cp .tmux/.tmux.conf.local .

做完以上配置后就有了和up演示中一样的功能。

前缀键

Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。

举例来说,帮助命令的快捷键是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就会显示帮助信息。

然后,按下 ESC 键或q键,就可以退出帮助。

tmux帮助命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其参数
$ tmux list-commands

# 列出当前所有 Tmux 会话的信息
$ tmux info

# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf

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顺时针旋转当前窗口的面板

参考文章

阮一峰-Tmux 使用教程

亡灵族-tmux常用命令

署名 - 非商业性使用 - 禁止演绎 4.0