tmux基本使用
1. tmux是什么
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称”窗口”),在里面输入命令。用户与计算机的这种临时的交互,称为一次”会话”(session)
Tmux 就是会话与窗口的”解绑”工具,将它们彻底分离。在我的理解看来,就是能在一个终端开启多个会话,简洁美观,这也是我想追求的效果;
tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。会话、窗口、面板之间的联系如下
一个tmux session
(会话)可以包含多个window
(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。
一个window
又可以包含多个pane
(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。
2. tmux下载安装
使用下方命令直接下载tmux即可:
sudo apt install tmux
3. 基本使用方法
3.1基本启动
直接输入tmux
即可进入tmux
tmux #创建一个无名会话
tmux new -s demo #创建一个名为demo的会话
3.2tmux快捷指令
关于快捷指令,首先要认识到的是:tmux的所有指令,都包含同一个前缀,默认为Ctrl+b
,输入完前缀过后,控制台激活,命令按键才能生效。前面tmux会话相关的操作中,我们共用到了两个快捷键Ctrl+b
+ d
、Ctrl+b
+ s
,但这仅仅是冰山一角,欲窥tmux庞大的快捷键体系,请看下表。
表一:系统指令。
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
? |
显示快捷键帮助文档 |
Ctrl+b |
d |
断开当前会话 |
Ctrl+b |
D |
选择要断开的会话 |
Ctrl+b |
Ctrl+z |
挂起当前会话 |
Ctrl+b |
r |
强制重载当前会话 |
Ctrl+b |
s |
显示会话列表用于选择并切换 |
Ctrl+b |
: |
进入命令行模式,此时可直接输入ls 等命令 |
Ctrl+b |
[ |
进入复制模式,按q 退出 |
Ctrl+b |
] |
粘贴复制模式中复制的文本 |
Ctrl+b |
~ |
列出提示信息缓存 |
表二:窗口(window)指令。
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
c |
新建窗口 |
Ctrl+b |
& |
关闭当前窗口(关闭前需输入y or n 确认) |
Ctrl+b |
0~9 |
切换到指定窗口 |
Ctrl+b |
p |
切换到上一窗口 |
Ctrl+b |
n |
切换到下一窗口 |
Ctrl+b |
w |
打开窗口列表,用于且切换窗口 |
Ctrl+b |
, |
重命名当前窗口 |
Ctrl+b |
. |
修改当前窗口编号(适用于窗口重新排序) |
Ctrl+b |
f |
快速定位到窗口(输入关键字匹配窗口名称) |
表三:面板(pane)指令。
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
" |
当前面板上下一分为二,下侧新建面板 |
Ctrl+b |
% |
当前面板左右一分为二,右侧新建面板 |
Ctrl+b |
x |
关闭当前面板(关闭前需输入y or n 确认) |
Ctrl+b |
z |
最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增) |
Ctrl+b |
! |
将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效) |
Ctrl+b |
; |
切换到最后一次使用的面板 |
Ctrl+b |
q |
显示面板编号,在编号消失前输入对应的数字可切换到相应的面板 |
Ctrl+b |
{ |
向前置换当前面板 |
Ctrl+b |
} |
向后置换当前面板 |
Ctrl+b |
Ctrl+o |
顺时针旋转当前窗口中的所有面板 |
Ctrl+b |
方向键 |
移动光标切换面板 |
Ctrl+b |
o |
选择下一面板 |
Ctrl+b |
空格键 |
在自带的面板布局中循环切换 |
Ctrl+b |
Alt+方向键 |
以5个单元格为单位调整当前面板边缘 |
Ctrl+b |
Ctrl+方向键 |
以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖) |
Ctrl+b |
t |
显示时钟 |
怎么看我都觉得太复杂了,还是跟着大佬自定义一下吧。
3.3 自定义tmux快捷键
修改前缀命令
相信只要你用过几次tmux,就会发现Ctrl+b
指令前缀,着实不太方便。这两个键相距太远,按键成本太高了。因此我们首先需要将它更换为距离更近的Ctrl+a
组合键,或者不常用的 ` 键(当然其他键也是可以的)。
tmux的用户级配置文件为~/.tmux.conf
(没有的话就创建一个),修改快捷指令,只需要增加如下三行即可。
set -g prefix C-a
unbind C-b #C-b即Ctrl+b组合键,unbind意味着解除绑定
bind C-a send-prefix #绑定Ctrl+a为新的指令前缀
修改新增面板指令
tmux中,使用最多的功能之一就是新增一个面板。
水平方向新增面板的指令是 prefix
+ "
,垂直方向是 prefix
+ %
,"
和 %
需要两个键同时按下才能完成,加上指令前缀至少需要3~4次按键才能组成一个完整的指令,同时这个两个键也不够醒目和方便,
因此我们可以绑定两个更常用的指令 -
、|
,如下所示:
unbind ‘“‘
bind - splitw -v -c ‘#{pane_current_path}’ # 垂直方向新增面板,默认进入当前目录
unbind %
bind | splitw -h -c ‘#{pane_current_path}’ # 水平方向新增面板,默认进入当前目录
修改面板切换指令
虽然指令前缀加方向键
可以切换面板,但方向键
太远,不够快,不够Geek。没关系,我们可以将面板切换升级为熟悉的h
、j
、k
、l
键位。
# 绑定hjkl键为面板切换的上下左右键
bind -r k select-pane -U # 绑定k为↑
bind -r j select-pane -D # 绑定j为↓
bind -r h select-pane -L # 绑定h为←
bind -r l select-pane -R # 绑定l为→
修改面板大小调整指令
习惯了全键盘操作后,命令的便捷性不言而喻。既然面板切换的指令都可以升级,面板大小调整的指令自然也不能落后。如下配置就可以升级你的操作:
# 绑定Ctrl+hjkl键为面板上下左右调整边缘的快捷指令
bind -r ^k resizep -U 10 # 绑定Ctrl+k为往↑调整面板边缘10个单元格
bind -r ^j resizep -D 10 # 绑定Ctrl+j为往↓调整面板边缘10个单元格
bind -r ^h resizep -L 10 # 绑定Ctrl+h为往←调整面板边缘10个单元格
bind -r ^l resizep -R 10 # 绑定Ctrl+l为往→调整面板边缘10个单元格
总结
上述修改的指令都是比较常用的指令其他不常用的指令等以后用到的时候在查资料进行修改,更改的指令如下表表格所示:
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+a |
- | 当前面板上下一分为二,下侧新建面板 |
Ctrl+a |
| | 当前面板左右一分为二,右侧新建面板 |
Ctrl+a |
j | 往↓切换面板 |
Ctrl+a |
k | 往↑切换面板 |
Ctrl+a |
h | 往←切换面板 |
Ctrl+a |
l | 往→切换面板 |
Ctrl+a |
Ctrl+j | 往↓调整面板边缘10个单元格 |
Ctrl+a |
Ctrl+k | 往↑调整面板边缘10个单元格 |
Ctrl+a |
Ctrl+h | 往←调整面板边缘10个单元格 |
Ctrl+a |
Ctrl+l | 往→调整面板边缘10个单元格 |
4. 其他相关设置
4.1 tmux终端默认zsh
在.tmux.conf
文件中添加以下内容
set -g default-shell /bin/zsh
4.2 设置终端默认tmux
chsh -s /usr/bin/tmux
如果要切换回去bash
chsh -s /bin/bash