参考文章:Tmux使用手册以及A Quick and Easy Guide to tmux

基本概念

tmux 采用C/S模型构建,输入 tmux 命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。会话、窗口、面板之间的联系如下:

  • 一个 tmux session(会话)可以包含多个 window(窗口),窗口默认充满会话界面
  • 一个window又可以包含多个pane(面板),窗口下的面板,都处于同一界面下

copy mode

copy mode 本质上就是一个纯键盘的历史浏览/复制模式,它让用户不用鼠标也能查看、搜索、选择 tmux pane 的历史输出。可以把它想成 tmux 内置的 less/vim,专门用来在终端里翻日志、查输出和复制内容。

进入 copy mode:

1
Ctrl+b [

退出 copy mode:

1
q

如果在设置中开启 vi 模式,基本的操作(上下移动、翻页、查找)就都和 vim 一样了。同时比 vim 方便的是,在 copy mode 下,如果希望直接复制内容到系统剪切板而非 tmux 的寄存器,可以直接使用鼠标选中,然后正常按下 Ctrl+Shift+C 即可。

基本操作

会话 (session)

新建会话

在终端输入

1
2
tmux # 新建一个无名称的会话
tmux new -s demo # 新建一个名称为demo的会话

断开当前会话

在会话中输入

1
tmux detach

或者使用快捷键:Ctrl+b + d

查看所有会话

1
2
tmux list-session # 查看所有会话
tmux ls # 查看所有会话,提倡使用简写形式

如果此时恰好在 tmux 会话中,还可以使用快捷键 Ctrl+b + s,此时 tmux 将打开一个会话列表,可以使用 ijhl 上下移动光标以及展开折叠会话或窗口。选中目标会话或窗口后,按回车键即可完成切换。

进入之前的会话

断开会话后,想要接着上次留下的现场继续工作,可以使用tmux的attach命令

1
2
3
tmux attach-session -t demo # 完整写法,进入到名称为demo的会话
tmux a -t demo # 简写
tmux a # 默认进入第一个会话

会话重命名

1
tmux rename-session -t 0 database # 将原来名为 0 的 session 重命名为 database

关闭会话

可以使用tmux的kill命令,kill命令有 kill-pane、kill-server、kill-session 和 kill-window 共四种,这里使用 kill-session。如下:

1
2
tmux kill-session -t demo # 关闭demo会话
tmux kill-server # 关闭服务器,所有的会话都将关闭

指令总结

前缀 指令 描述
Ctrl+b d 退出会话
Ctrl+b s 打开会话列表,用于切换会话

窗口 (window)

前缀 指令 描述
Ctrl+b c 新建窗口
Ctrl + b & 关闭当前窗口(关闭前需输入yor n确认)
Ctrl + b 0 ~ 9 切换到指定窗口
Ctrl + b p 切换到上一窗口
Ctrl + b n 切换到下一窗口
Ctrl + b w 打开窗口列表,用于且切换窗口

面板 (pane)

前缀 指令 描述
Ctrl + b " 当前面板上下 下侧新建面板 分为
Ctrl + b % 当前面板左右 右侧新建面板
Ctrl + b x 关闭当前面板 (y or n确认),或者直接 Ctrl + d,或者输入 exit
Ctrl + b z 最大化当前面板,再重复一次按键后恢复原状(v1.8版本新增)
Ctrl + b q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
Ctrl + b 方向键 移动光标切换面板
Ctrl + b o 选择下一面板
Ctrl + b 空格键 在自带的面板布局中循环切换

当前配置

配置文件为:~/.tmux.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
set -g mouse off
set -g history-limit 10000

# 让 Yazi 的图片预览在 tmux 中能正确透传终端图像协议
set -g allow-passthrough on
set -ga update-environment TERM
set -ga update-environment TERM_PROGRAM

# 更容易看清窗口编号
set -g base-index 1
setw -g pane-base-index 1

# 让重载配置更方便
bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"

# 分屏后保持当前路径
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

# 窗口更直观
set -g status-left-length 30
set -g status-right-length 50

# copy mode 键盘设置
setw -g mode-keys vi

# 快速进入 copy mode
bind -n PageUp copy-mode -u

# -----------------------------
# 状态栏整体
# -----------------------------
set -g status on
set -g status-justify left
set -g status-left-length 0
set -g status-right-length 0
set -g status-right "" # 去掉右侧时间/CPU等

# 底色灰色或透明
set -g status-bg colour236 # 深灰色,或者用 'default' 保持透明
set -g status-fg colour255 # 默认文字颜色

# -----------------------------
# 窗口标签样式
# -----------------------------
# 当前窗口高亮
set-window-option -g window-status-current-format "#[fg=black,bg=green,bold] #I:#W #[default]"

# 非当前窗口灰色背景,白字
set-window-option -g window-status-format "#[fg=white,bg=colour236] #I:#W #[default]"

# 窗口标签间仅留空格
set -g window-status-separator " "