Tmux
2023 linux在终端经常会遇到需要开启多窗口的需求,发现已经有成熟解决方案了 - Tmux。
基本概念
- Sessions:会话,开启 Tmux 会开启一个会话,会话可以划分成多个窗口。
- Windows:窗口,开启会话会开启一个窗口,窗口可以划分多个窗格。
- Panes:窗格,开启窗口会开启一个窗格,窗格是 Tmux 的基本单元。
图片来源:优雅地使用命令行:Tmux 终端复用
在有关的会话的操作上基本上以 tmux
命令为主,而有关窗口,窗格则以 prefix 快捷键位为主。
Tmux 默认的 prefix 快捷键 <C-b>
按起来太反人类了,一般情况都会修改 perfix 的快捷键。在下面的快捷键例子依旧采用 C-b
作为演示。
会话
开始一个新的会话
tmux
tmux new
tmux new -s [name]
列出所有的会话
tmux ls
tmux list-sessions
重新连接到会话,未指定会话名称默认为最后的会话
tmux a -t [name]
tmux at -t [name]
tmux attach -t [name]
tmux attach-session -t [name]
关闭会话
tmux kill-session -t [name]
tmux kill-ses -t [name]
# 关闭所有会话
tmux kill-session -a
# 关闭指定窗口之外所有窗口
tmux kill-session -a -t [name]
窗口
功能 | 快捷键 |
---|---|
创建新窗口 | <C-b> + c |
关闭当前窗口 | <C-b> + & |
列出窗口 | <C-b> + w |
上一个窗口 | <C-b> + p |
下一个窗口 | <C-b> + n |
切换最后活动窗口 | <C-b> + l |
切换到指定数字窗口 | <C-b> + 0..9 |
窗格
窗格的操作是最经常使用的操作。
功能 | 快捷键 |
---|---|
切换最后的活动窗格 | C-b + ; |
水平切割窗格 | C-b + % |
垂直切割窗格 | C-b + " |
将当前窗格移至左边 | C-b + { |
将当前窗格移至右边 | C-b + } |
切换上边的窗格 | C-b + ⬆️ |
切换下边的窗格 | C-b + ⬇️ |
切换左边的窗格 | C-b + ⬅️ |
切换右边的窗格 | C-b + ➡️ |
切换窗格布局 | C-b + <space> |
切换到下一个窗格 | C-b + o |
切换到上一个窗格 | C-b + q |
切换到指定数字窗格 | C-b + q + 0..9 |
切换窗格的缩放 | C-b + z |
关闭当前窗格 | C-b + x |
配置
默认配置文件:~/.tmux.conf
其他生效的配置目录:$XDG_CONFIG_HOME/tmux/tmux.conf
,一般为 ~/.config/tmux/tmux.conf
bind <x>
相当于<prefix> + <x>
bind -n <x>
相当于取消<prefix>
插件
插件可以使用 Tmux Plugin Manager(tpm) 进行管理
推荐的插件有:
复制
Tmux 的复制模式感觉不是很好用。
- 可以使用
C-b
+[
进入复制模式,配合 vi 模式进行复制。 - 鼠标复制
- 前提开启鼠标支持
set -g mouse on
- 按住 shift,鼠标左键选择文本
- 右键选择复制到剪切板
- 前提开启鼠标支持
问题
编码错误
在部分环境下运行 tmux 可以会遇到中文或 emoji 等编码错误。
可以运行 locale charmap
查询默认的 locale,通常默认情况下是 ANSI_X3.4-1968
,需要修改成 UTF-8
。
sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales
选择 en_US.UTF-8 UTF-8