tmux 是一个 terminal multiplexer(终端复用器),它可以启动一系列终端会话,本文介绍 tmux 使用方法。
讲解使用之前,我们需要先搞清楚窗口与会话的概念。
tmux 是一个 终端复用器(terminal multiplexer),它可以启动一系列终端会话。
我们使用命令行时,打开一个终端窗口,,会话开始,执行某些命令如npm run dev,关闭此终端窗口,会话结束,npm run dev服务会话随之被关闭。有时我们希望我们运行的服务如npm run dev 或者一些cd命令等,被保留,而不是关闭窗口再打开后,重新手动执行。tmux的主要用途就在于此。
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
# Ubuntu 或 Debian
$ sudo apt-get install tmux
# CentOS 或 Fedora
$ sudo yum install tmux
# Mac
$ brew install tmux
# 启动tmux
$ tmux
在终端窗口上,运行tmux,其实就打开了一个终端与tmux服务的会话。只不过我们可以在tmux会话上层,再次输入’会话‘命令,使tmux上层运行的’会话’与终端窗口进行分离。这里面tmux其实可以称之为伪窗口(它其实是会话)。
# 启动命名tmux
$ tmux new -s <name>
例如:
$ tmux new -s test
按下Ctrl+d
或者显式输入exit
命令,就可以退出 Tmux 窗口。
在 Tmux 窗口中,按下Ctrl+b d
或者输入tmux detach
命令,就会将当前会话与窗口分离。
# 分离会话
$ tmux detach
承接刚刚的示例:
执行tmux ls
可看到当前所有的 tmux 伪窗口
$ tmux ls
test: 1 windows (created Wed Jan 5 16:13:49 2022)
tmux 工具的宝贵之处就在于会话可以重接
tmux detach
关闭tmux伪窗口后,可以使用如下命令重新接入之前的会话# 重接会话 使用伪窗口编号
$ tmux attach -t 0
# 重接会话 使用伪窗口名称
$ tmux attach -t <name>
有时候我们想彻底关闭某个会话,不想让其再执行,怎么操作?
# 使用会话编号
$ tmux kill-session -t 0
# 使用会话名称
$ tmux kill-session -t <name>
# 使用会话编号
$ tmux switch -t 0
# 使用会话名称
$ tmux switch -t <session-name>
$ tmux rename-session -t 0 <new-name>
Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。
tmux split-window
命令用来划分窗格。
# 划分上下两个窗格
$ tmux split-window
# 划分左右两个窗格
$ tmux split-window -h
tmux select-pane
命令用来移动光标位置。
# 光标切换到上方窗格
$ tmux select-pane -U
# 光标切换到下方窗格
$ tmux select-pane -D
# 光标切换到左边窗格
$ tmux select-pane -L
# 光标切换到右边窗格
$ tmux select-pane -R
tmux swap-pane
命令用来交换窗格位置。
# 当前窗格上移
$ tmux swap-pane -U
# 当前窗格下移
$ tmux swap-pane -D
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。
tmux new-window
命令用来创建新窗口。
$ tmux new-window
# 新建一个指定名称的窗口
$ tmux new-window -n <window-name>
新建窗口后左下角可以看到多个选项卡,星号表示当前所在窗口
tmux select-window
命令用来切换窗口。
# 切换到指定编号的窗口
$ tmux select-window -t <window-number>
# 切换到指定名称的窗口
$ tmux select-window -t <window-name>
tmux rename-window
命令用于为当前窗口起名(或重命名)。
$ tmux rename-window <new-name>
# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys
# 列出所有 Tmux 命令及其参数
$ tmux list-commands
# 列出当前所有 Tmux 会话的信息
$ tmux info
# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b
,即先按下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 | 顺时针旋转当前窗口的窗格,所有窗格向前移动一个位置,第一个窗格变成最后一个窗格 |
; | 光标切换到上一个窗格 |
o | 光标切换到下一个窗格 |
z | 当前窗格全屏显示,再使用一次会变回原来大小 |