以前用过screen,最近两年主要转移到tmux了,觉得更强大、更易用,也偶尔将tmux安利给需要的同事。这里把收集整理的tmux使用资料发布一下。
tmux 简介
tmux是一个终端复用、窗口分配的神器,其在github上地址为: https://github.com/tmux/tmux
tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务,此时将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。一个tmux session(会话)可以包含多个window(窗口),窗口默认充满整个会话界面,允许在单个窗口中同时访问多个会话,允许每个会话有多个连接窗口,因此可以多人实时共享会话。一个window又可以包含多个pane(面板/窗格),窗口下的面板,都处于同一界面下。
如下图所示:
关键设置
1. 指令前缀 设置
由于tmux默认的 指令前缀 是 ctrl + b ,但这个组合键单手操作起来不太顺手,我一般就将其改为 ctrl + a 键。
在 ~/.tmux.conf 配置文件中设置:
1 2 3 4 |
unbind C-b # 解除绑定Ctrl+b set -g prefix C-a # -g 选项全局配置(global),让设置的选项在所有创建的 tmux 会话里生效 bind C-a send-prefix # 绑定Ctrl+a为新的指令前缀 |
tmux设置Ctrl+a为前缀后,会与终端的“将光标移动到行首”的快捷键(ctrl+a)冲突,那么实现移动到行首的快捷键是:按两下 ctrl + a
另外,将光标移动到行尾 是 ctrl + e (这个键与平时终端上操作的移动到行尾的并没有冲突)
2. 鼠标滚屏
tmux 默认配置中 滚屏查看和文本复制,用起来非常麻烦,效率远没有鼠标选择来的快。
好在 tmux 提供了一些个性化配置项来优化这些配置,在 ~/.tmux.conf 配置文件中做如下设置:
1 2 3 4 5 6 7 8 9 |
# 开启鼠标模式 set -g mode-mouse on # 允许鼠标选择窗格 set -g mouse-select-pane on # 如果喜欢给窗口自定义命名,那么需要关闭窗口的自动命名 set-option -g allow-rename off # 如果对 vim 比较熟悉,可以将 copy mode 的快捷键换成 vi 模式 set-window-option -g mode-keys vi |
配置文件修改完成后,可以 tmux kill-server 重启所有 tmux 进程,或者在 tmux 会话中使用 ⌃a : 进入控制台模式,输入 source-file ~/.tmux.conf 命令重新加载配置。
3. 鼠标复制
tmux 下开启鼠标滚屏后,复制文本有两种方式:(由于我一般是用Mac上的iTerm2,所以用方法2较为方便)
方法 1:使用 ⌃a z 进入窗格全屏模式,鼠标选择文本的同时按住 option 键 ⌥,然后使用 ⌘c 进行复制;
方法 2:开启 iTerm2 「在选择时复制」选项,即可实现自动选择复制。如下图:
常用操作
1. 分屏、窗格 pane:
上下分屏:ctrl + a 再按 "
左右分屏:ctrl + a 再按 %
(布局水平显示:ctrl + a 再按 + ; 布局垂直显示:ctrl + a 再按 = ;这个可能和自身配置相关)
切换屏幕:ctrl + a 再按o (还有 h,j,k,l 和 上下左右方向箭头可用)
关闭一个面板:ctrl + a 再按x
2. 窗口 window:
c 创建新窗口
& 关闭当前窗口
[0-9] 数字键切换到指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 前后窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口,便于识别
. 修改当前窗口编号,相当于重新排序
f 在所有窗口中查找关键词,便于窗口多了切换
3. 会话 session:
- ? 列出所有快捷键;按q返回
- d 脱离当前会话,可暂时返回Shell界面
- $ 重命名当前会话
- s 选择并切换会话;在同时开启了多个会话时使用
- 进入命令行模式;此时可输入支持的命令,例如 kill-server 关闭所有tmux会话
4. 最基本的Tmux使用流程:
1 2 3 4 5 6 |
1. tmux new -s $session-name #新建会话 2. 在窗口中运行程序 3. ctrl+a d #将会话分离 4. 出去休息一段时间…… 5. tmux a -t $session-name #重新连接到会话 查看程序执行情况 |
5. 其他一些命令:
1 2 3 4 5 |
tmux list-keys 列出所有快捷键,及其对应的 Tmux 命令 tmux list-commands 列出所有 Tmux 命令及其参数 tmux info 列出当前所有 Tmux 会话的信息 tmux source-file ~/.tmux.conf 重新加载当前的 Tmux 配置 |
参考文档:
https://www.cnblogs.com/kaiye/p/6275207.html
https://programtip.com/zh/art-14901
http://www.ruanyifeng.com/blog/2019/10/tmux.html
https://gist.github.com/Jiezhi/076543ff6141568c59bf tmux configure file from 《tmux:Productive Mouse-Free Development》