参考文章: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
set -g mouse off
set -g history-limit 10000

# 更容易看清窗口编号
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