# tmux使用简记
# 概念
tmux 是一个终端复用器(terminal multiplexer)
tmux中的重要概念
- 会话(session): 建立一个 tmux 工作区会话,会话可以长期驻留,重新连接服务器不会丢失,我们只需重新 tmux attach 到之前的工作区就可以恢复会话,这样你的工作区就可以常驻服务器了,非常方便
- 窗口(window): 容纳多个窗格
- 窗格(pane): 可以在窗口中分成多个窗格,每个窗格都可以运行各种命令

安装过程略,暂未研究配置。下面直接开始记录三个概念中的常用操作
# 使用基础
# 系统指令
| 操作 | 快捷键 |
|---|---|
| 帮助文档 | <CB> ? |
| 强制重载当前会话 | <CB> r |
| 进入命令行模式 | <CB> : |
# 会话
声明:tmux中前缀键为ctrl+b,以下简记为<CB>,用于激活控制台,激活后快捷键才生效
| 操作 | 命令 | 快捷键 | 备注 | 适用坐标 |
| [常用]新建会话 | tmux tmux new -s <session_name> | 新建无名会话 新建名为session_name的会话 | 终端中 | |
| [常用]分离会话&挂起会话 | tmux detach | <CB> d <CB> ctrl z <CB> D | 将当前会话分离到后台运行,并返回终端,使用<CB> ctrl z也可以实现类似分离效果,<CB> D在多个会话被载入时可选择分离其他会话 | 会话中 其他会话中 |
| [常用]载入会话 | tmux a[ttach-session] tmux a[ttach-session] -t <session_name | 从终端默认载入第一个会话 载入指定名的会话 | 终端中 | |
| [常用]列出所有会话 | tmux list-session or tmux ls | <CB> s | 快捷键仅用于会话中,可上下选择载入其他会话 | 终端或会话 |
| 切换会话 | tmux switch -t <session_name> | 切入到指定会话 | 会话中 | |
| 重命名会话 | tmux rename-session -t <session_name> <new_name> | <CB> $ | 快捷键仅是命名当前会话 | 终端或会话 |
| 终止会话 | tmux kill-session -t <session_name> tmux kill-server | 终止指定名会话(也可以是编号),可终止自身 关闭服务器,终止所有会话 | 终端或会话 |
# 窗口
| 操作 | 快捷键 | 备注 |
| [常用]新建窗口 | <CB> c | 在当前会话新建窗口,左下角窗口列表新增一项 |
| [常用]关闭窗口 | <CB> & | 需要输入[y/n]来确认 |
| [常用]切换窗口 | <CB> ['] 0-9 <CB> p,<CB> n | 切换到指定窗口 切换到前/下一个窗口 |
| [常用]窗口列表 | <CB> w | 打开窗口列表,可选择切换窗口 |
| [常用]重命名窗口 | <CB> , | 为当前窗口重新命名 |
| 修改窗口编号 | <CB> . | 为当前窗口重新赋值编号,所有窗口再按编号排序 |
| 检索窗口 | <CB> f | 快速定位到含有关键字的窗口 |
# 面板
| 操作 | 快捷键 | 备注 |
| [常用]新建面板 | <CB> " <CB> % | 在当前面板下侧新建面板 在当前面板右侧新建面板 |
| [常用]关闭面板 | <CB> x | 需要输入[y/n]来确认 |
| [常用]切换面板 | <CB> 方向键 <CB> o | 切换到指定方向的面板 循环切换到下一面板 |
| 新窗口打开面板 | <CB> ! | 需窗口中有一个以上的面板 |
| 查看面板编号 | <CB> q | 在编号消失前输入数字可切换到指定面板 |
| 顺时针移位面板 | <CB> ctrl+o | 将当前窗口所有面板按顺时针移位 |
| 置换面板 | <CB> { <CB> } | 向前置换面板 向后置换面板 |
| 最大化面板 | <CB> z | 执行第二次还原大小 |
| 调整面板大小 | <CB> alt+方向键 <CB> ctrl+方向键 | 以5单元格调整面板边缘 以1单元格调整面板边缘 |
| 显示时钟 | <CB> t | 当前面板显示时钟 |
| 循环改变面板布局 | <CB> 空格键 | 在自带的面板布局中循环切换 |
# 高级操作
# 远程shell默认开启tmux(不建议这种操作,我最近失败了)
在 ~/.bash_profile 文件添加:
if [ -z "$TMUX" ]; then
tmux attach -t default || tmux new -s default
fi
# 配置文件
- 新建
~/.tmux.conf - 修改配置。使用oh-my-tmux可参考https://zhuanlan.zhihu.com/p/112426848 (opens new window)
- 在会话中使用
<CB> :,输入系统命令source-file ~/.tmux.conf重载配置
我的配置
先安装oh-my-tmux:https://github.com/gpakosz/.tmux (opens new window)
tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Power line
tmux_conf_theme_left_separator_sub='\uE0B1' # you only need fonts patched with
tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalo
tmux_conf_theme_right_separator_sub='\uE0B3' #
tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} %R , %d %b | #{username}#{root} | #{hostname} "
# 修改会话数据的保持路径,此处不能使用除了$HOME, $HOSTNAME, ~之外的环境变量
set -g @resurrect-dir '/home/julian/AppLogs/tmux'
# set -g @continuum-restore 'on' # 启用自动恢复
set -g @continuum-save-interval '15'
setw -g mode-keys vi # 复制模式的光标移动风格改为vi模式
run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux
run-shell ~/.tmux/plugins/tmux-continuum/continuum.tmux
bind -r m set-option -g mouse on # 鼠标模式开启
bind -r M set-option -g mouse off # 鼠标模式关闭
# 开启鼠标支持
v2.1之前,配置文件中加入
setw -g mode-mouse on # 支持鼠标选取文本等
setw -g mouse-resize-pane on # 支持鼠标拖动调整面板的大小(通过拖动面板间的分割线)
setw -g mouse-select-pane on # 支持鼠标选中并切换面板
setw -g mouse-select-window on # 支持鼠标选中并切换窗口(通过点击状态栏窗口名称)
v2.1之后
set-option -g mouse on # 等同于以上4个指令的效果
# 复制模式
1.查看复制模式默认快捷键风格:tmux show-window-options -g mode-keys # mode-keys emacs
2.切换为vi模式:tmux setw -g mode-keys vi(建议加入配置文件中),开启vi风格后,支持vi的C-d、C-u、hjkl等快捷键
3.<CB> [进入复制模式,
- 移动光标到需要复制的内容的起点
- 按空格开始复制
- 移动到终点
- 按回车结束
4.<CB> ]粘贴复制的内容
# 多个窗口合并为面板
在当前窗口,按下<CB> :,打开命令行,然后输入如下命令:
join-pane -s [window] # 合并名称为window的窗口的默认(第一个)面板到当前窗口中
join-pane -s [window].1 # .1显式指定了第一个面板,.2就是第二个面板
每次执行join-pane命令都会合并一个面板,并且指定的窗口会减少一个面板,直到面板数量为0,窗口关闭。
除了在当前会话中操作外,join-pane命令甚至可以从其它指定会话中合并面板,格式为
join-pane -s [session_name]:[window].[pane]
如join-pane -s 2:1.1 即合并第二个会话的第一个窗口的第一个面板到当前窗口,当目标会话的窗口和面板数量为0时,会话便会关闭。
# 参考
http://www.ruanyifeng.com/blog/2019/10/tmux.html (opens new window)
https://zhuanlan.zhihu.com/p/43687973 (opens new window)
http://louiszhai.github.io/2017/09/30/tmux/ (opens new window)