tmux学习笔记
这并不是一个完整的 tmux 学习笔记,只是非常简要的笔记和速查手册,完整内容还是直接看tmux Github 文档
命令速查
session管理 1
2
3
4
5
6
7
8
9
10# 创建session
tmux
tmux new
# 进入最近的session
tmux attach
tmux a
# 脱离session
tmux detach
window和pane管理 1
2
3
4
5
6# 创建window
tmux neww
# 拆分window,创建pane
tmux split-window -v # 上下分割
tmux split-window -h # 左右分割
查看 1
2tmux ls
prefix+w
window常用快捷键:
- 创建window:
prefix+c
- 切换下一个window:
prefix+n
- 切换上一个window:
prefix+p
- 切换指定window:
prefix+<n>
- 直接鼠标点击状态栏也是可以切换的
pane常用快捷键:
- 切换pane:
prefix+q<n>
,或者直接鼠标点击 - 删除pane:
prefix+x
- 放大pane:
prefix+z
- 拆分当前pane为window:
prefix+!
基本概念
tmux 为终端复用器,可以启动一系列终端会话,可以将会话和终端窗口分离:关闭终端窗口再打开,会话并不终止,而是继续运行在执行,这可以有效避免因网络波动等导致的会话中断,也便于开启多窗口任务。
tmux 在逻辑上主要有三层概念:session(会话)> window(窗口)> pane(窗格)。
- session
- session 具有索引(默认从0开始),可以自定义名称
- 远程登录时开启 tmux client 客户端,然后可以 attach 到一个 session
- session 可以被一个或多个 client attach(相当于从多个设备同时登入),或者处于 detached 状态,此时 session 保持在后台运行
- session 可以包含一组 window:一个屏幕装不下了,把所有东西暂移出去,新建一个空的 window。在同一时刻只能呈现一个 current window
- window
- window 具有索引(默认从0开始),同时也具有名称(默认名称是当前 active pane 运行的程序名)
- window 可以被一个或多个 session 包含,通常只属于一个 session
- window 可以包含一组 pane,但是同一时刻只有一个 active pane,即光标所在的pane
- window 记录了其中的 pane 的布局规则
- pane
- pane 是最小单位,程序或指令在一个 pane 上运行,多个程序分别在多个 pane 同时运行
一个window下的不同pane如下图
tmux支持查看当前的所有session+window+pane,如下图所示
关于tmux命令的使用:
- 可以通过输入命令来执行 tmux 指令,例如
tmux attach
- 可以使用组合快捷键,tmux
的组合快捷键通常需要使用一个固定前缀来触发,默认前缀
prefix=ctrl+b
,可以修改为其他前缀,例如ctrl+a
,此时完整的组合快捷键prefix+w
表示ctrl+a w
- 可以像 vim
一样,在
prefix
之后使用:
然后键入指令,此时的指令不再需要输入tmux
,例如prefix
加上:detach
,
使用快捷键的前提是必须已经处于tmux之中。
tmux
使用的配置文件为~/.tmux.conf
,也可以是~/.config/tmux/tmux.conf
(在官方文档中没有提到,但是实际确实支持),个人的配置文件存放在fenglielie/dotfiles仓库。
补充:
- 不同设备同时打开一个 session,即多个 client 连接到同一个 session 时,可能会因为屏幕尺寸不同发生冲突,出现显示异常,下面会说明如何处理这种问题。
- 如果 tmux 一直有后台 session
在运行,那么对于某些配置的修改可能不会生效,例如我们通过 bash 启动 tmux
后,再次对
.bashrc
的修改可能不会生效,必须完全重启 tmux。与之类似的还有 tmux 自身的配置文件。
基本指令
session管理
使用如下指令均可以创建新的session,默认使用从0开始的索引
1 | tmux |
new
可以作为new-session
的缩写
在创建时可以使用-s
选项指定session的名称
1 | tmux new-session -s mysession |
注意 session
的名称不能重复,使用-A
选项在不存在时自动创建,在已存在时自动进入
1 | tmux new -A -s session_name |
使用如下指令可以关闭最近的一个session
1 | tmux kill-session |
也可以使用-s
选项指定关闭某一个session
1 | tmux kill-session -t mysession |
使用-a
选项会关闭除了当前session之外的所有session
1 | tmux kill-session -a |
使用-a
选项加上-t
选项会关闭除了指定session之外的所有session
1 | tmux kill-session -a -t mysession |
使用kill-server
可以在 server
层面直接删除所有的tmux后台进程,包括所有的session
1 | tmux kill-server |
使用如下指令可以脱离当前session,但是并不会关闭,session会在后台保持运行
1 | tmux detach |
使用attach
可以进入一个已存在的 session
1 | tmux attach |
默认会attach到最近的一个session,也可以指定session
1 | tmux attach -t mysession |
a
可以作为attach
的缩写
如果多个会话同时打开一个
session,可能会导致尺寸问题,可以在加入时使用-d
选项断开其它会话
1 | tmux attach -d -t mysession |
创建 session 时使用-d
选项可以直接将其挂到后台,而非自动
attach
1 | tmux new-session -d |
可以重命名指定的session
1 | tmux rename-session -t 0 <new-name> |
可以直接切换到指定的session
1 | tmux switch -t mysession |
window管理
使用new-window
可以创建
window,默认索引作为名称,也可以自定义名称,,-n
通常是
window 名称选项
1 | tmux new-window -n window_name |
创建window后会直接切换过去,如果当前不在 session 中,则会在最近的 session 创建 window。
使用-d
选项可以在后台创建 window,但不会切换过去
1 | tmux new-window -d |
neww
可以作为new-window
的缩写
使用kill-window
可以删除当前 window 以及它的所有 pane,
1
tmux kill-window
可以重命名指定的window 1
tmux rename-window -t 0 <new-name>
pane管理
可以拆分当前 window 得到多个 pane,可以支持上下分割和左右分割
1 | tmux split-window -v // 上下分割 |
使用kill-pane
可以删除当前 pane
1 | tmux kill-pane |
查询指令
使用tmux ls
可以查询当前运行的所有session
1 | tmux ls |
查询并处理当前所有的 session/window/pane,以树的方式呈现
- 进入有如下两组快捷键
- 快捷键
prefix+w
默认展开所有项 - 快捷键
prefix+s
默认只呈现 session 层信息,可以使用左右键展开或收起不同的层
- 快捷键
- 查询并移动到树的指定位置,然后回车即可完成切换;或者使用
q
撤销切换 - 使用
x
可以删除指定的项,需要y
确认
使用快捷键prefix+?
可以查看所有的快捷键说明,按q
退出。
鼠标支持
开启鼠标支持后,使用左键选择片段后会自动进行复制。
开启鼠标支持后,直接使用鼠标点击不同区域,或者使用prefix
加上方向键,就可以让光标在不同
pane 之间切换。直接使用鼠标拖动边,或者使用prefix
加上 ctrl
方向键,可以调整 window 的布局。
补充指令
logout
和exit
也能直接退出并删除当前的
pane(如果只有一个 pane,则删除整个 window,如果只有一个
window,则删除整个 session)
默认window和pane的编号从0开始,切换操作比较不方便,通常改成从1开始。
快捷键
很多常见的指令都有快捷键相对应
行为 | 指令 | 快捷键 |
---|---|---|
查看当前所有session/window/pane | prefix+w | |
脱离当前session | tmux detach | prefix+d |
创建window | tmux new-window | prefix+c |
切换到下一个window | prefix+n | |
切换到上一个window | prefix+p | |
切换到指定索引的window | prefix+<n> | |
删除当前window | tmux kill-window | prefix+& |
切换pane(prefix+q会显示所有pane的编号) | prefix+q<n> | |
将当前pane设置为一个独立的window | prefix+! | |
临时放大当前的 pane 为全屏(再按一次恢复) | prefix+z | |
删除当前pane | tmux kill-session | prefix+x |
在client列表中选择一个client断开 | prefix+D |