tmux是一个优秀的终端复用软件,split窗口。可以在一个terminal下打开多个终端。
即使非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失。SSH重新连接以后,就可以直接回到原来的工作环境,不但提高了工作效率,还降低了风险,增加了安全性。
tmux完全使用键盘控制窗口,实现窗口的切换功能。
2. 安装
sudo apt-get install tmux
tmux # 打开tmux终端
3. 会话,窗口,面板
根据tmux的定义,在开启了tmux服务后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板, 虽然其使用方法与终端控制台完全相同。
tmux使用C/S模型构建,主要包括以下单元模块:
server服务器。输入tmux命令时就开启了一个服务器。
session会话。一个服务器可以包含多个会话
window窗口。一个会话可以包含多个窗口。
pane面板。一个窗口可以包含多个面板。
4. 快捷键操作
C-b ? 显示快捷键帮助
C-b C-o 调换窗口位置,类似与vim 里的C-w
C-b 空格键 采用下一个内置布局
C-b ! 把当前窗口变为新窗口
C-b “ 横向分隔窗口
C-b % 纵向分隔窗口
C-b q 显示分隔窗口的编号
C-b o 跳到下一个分隔窗口
C-b 上下键 上一个及下一个分隔窗口
C-b C-方向键 调整分隔窗口大小
C-b c 创建新窗口
C-b 0~9 选择几号窗口
C-b c 创建新窗口
C-b n 选择下一个窗口
C-b l 切换到最后使用的窗口
C-b p 选择前一个窗口
C-b w 以菜单方式显示及选择窗口
C-b t 显示时钟
C-b ; 切换到最后一个使用的面板
C-b x 关闭面板
C-b & 关闭窗口
C-b s 以菜单方式显示和选择会话
C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话
5. 配置
tmux的系统级配置文件为/etc/tmux.conf,用户级配置文件为~/.tmux.conf。配置文件实际上就是tmux的命令集合,也就是说每行配置均可在进入命令行模式后输入生效。
6.1 设置前缀为Ctrl + a(不建议这么做,vim中Ctrl+a已经被定义)
set -g prefix C-a
6.2 解除Ctrl+b 与前缀的对应关系
unbind C-b
6.3 使tmux生效
重启tmux起效
或者先按C+b,然后输入:,进入命令行模式,在命令行模式下输入:
source-file ~/.tmux.conf6.4 将Ctrl + r 设置为加载配置文件,并显示”Refleshed configure!”信息
bind C-r source-file ~/.tmux.conf \; display "Refleshed Configure!"
6.5 将切换窗口设置成vim模式
bind-key k select-pane -U # up
bind-key j select-pane -D # down
bind-key h select-pane -L # left
bind-key l select-pane -R # right
上面的最后一条语句会更改C-a l的功能,我挺喜欢这个功能的,因为我们很时候都是在两个窗 口或这两个面板中切换,所以我又加入如下语句
bind-key C-l select-window -l
现在我的l键可不能随便按了,Ctrl+a l是切换面板,Ctrl+x Ctrl+l切换窗口,Ctrl+l清屏。
6.6 复制模式copy-mode
前缀 [ 进入复制模式
按 space 开始复制,移动光标选择复制区域
按 Enter 复制并退出copy-mode。
将光标移动到指定位置,按 前缀 ] 粘贴
如果把tmux比作vim的话,那么我们大部分时间都是处于编辑模式,我们复制的时候可不可以像vim一样移动呢?只需要在配置文件中加入如下行即可。
setw -g mode-keys vi #copy-mode 将快捷键设置为vi 模式
6.7 会话
C-x s 以菜单的方式查看并选择会话
C-x :new-session 新建一个会话
C-x d 退出并保存会话
终端运行 tmux attach 返回会话
6.8 命名会话
tmux new -s session
tmux new -s session -d #在后台建立会话
tmux ls #列出会话
tmux attach -t session #进入某个会话
6.9 使当前pane最大化
前缀 z tmux 1.8新特性,最大化当前所在面板
前缀 z 返回原来状态
6.10 滚屏
set-window-option -g mode-mouse on # (setw其实是set-window-option的别名)
6.11 用鼠标切换窗口/调节分屏大小
setw -g mouse-resize-pane on # 开启用鼠标拖动调节pane的大小(拖动位置是pane之间的分隔线)
setw -g mouse-select-pane on # 开启用鼠标点击pane来激活该pane
setw -g mouse-select-window on # 开启用鼠标点击来切换活动window(点击位置是状态栏的窗口名称)
setw -g mode-mouse on # 开启window/pane里面的鼠标支持(也即可以用鼠标滚轮回滚显示窗口内容,此时还可以用鼠标选取文本)
6.12 保存Tmux会话