tmux是非常好用的终端复用工具。对于远程操作linux可以大大提升效率。
为什么使用tmux
- 终端混乱。没有使用tmux的时候,终端界面正常工作的时候大概是下图这样子。每台机器由于可能同时在多个目录下进行编辑,运行,监测,所以每台机器可能占用多个终端tab位置。这样导致tab很多,而且机器之间还可能混淆,在要执行一条命令时候不好找到对应的终端。
- 连接中断问题。而且在ssh远程登陆一般不敢跑大的训练程序,万一网络不稳定,或者机器死机,不小心关闭终端等都可能造成前功尽弃。
- 复用问题。打开很多窗口在不同机器上无法复用。客户端关机后就消失。
使用后tmux之后终端大概是下图这个样子,每台机器基本上只需要一个tab。而且由于强悍的分屏功能,使得在一个界面上同时写代码,运行,检查结果非常方便。
这里简单介绍一下tmux的基本概念。上图有3个分屏界面,每个分屏界面称为pane。这3个分屏界面共同构成一个window。一个会话可以包含多个window。上图中左下角处,显示当前有两个window,可以使用快捷键进行window的切换。层次等级如下:
- session
- window
- pane
- window
tmux 安装
tmux是安装在远程服务器上的软件。通过ssh登陆后,再运行tmux new新建会话。操作完了退出会话。运行的程序不会退出。可以用另一台机器登陆上来,attach该会话,继续操作。
在ubuntu下直接sudo apt-get install tmux即可。
可以考虑使用以下配置(原始地址是https://github.com/gpakosz/.tmux.git, 我做了一些更改):
$ sudo apt-get install powerline
$ cd ~
$ rm -rf .tmux
$ git clone https://github.com/vsooda/.tmux.git
$ ln -s .tmux/.tmux.conf
$ cp .tmux/.tmux.conf.local .
该配置在用户home目录下创建了.tmux.conf文件,其作用类似与.vimrc之于vim。可以手动更改其配置。该文件内容如下:
set -g default-terminal "screen-256color" # colors!
setw -g xterm-keys on
set -s escape-time 0 # fastest command sequences
set -sg repeat-time 600 # increase repeat timeout
set -s quiet on # disable various messages
set -g prefix2 C-a # GNU-Screen compatible prefix
bind C-a send-prefix -2
set -g history-limit 5000 # boost history
# edit configuration
bind e new-window -n '~/.tmux.conf.local' "sh -c '\${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"'"
# reload configuration
bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced'
...
基本用法
以下快捷键基于以上配置,默认快捷键请参考其他文章,最重要的是要知道原理。
就像vim要分屏,在分屏中切换,一般会有一些快捷键。同理,tmux也有。作为快捷键很重要的一点是不能与现有系统中的快捷键冲突,所以一般会加入一些prefix。先按某些键之后,再按另一些,这样不会和系统冲突。
tmux的默认prefix是ctrl+b,有点不好按,一般会对其更改,比如设置为ctrl+a之类的(不用担心,上面的配置已经做了这层映射,无需再做配置)。下文介绍的快捷键如果没有特别说明,均表示需要先按prefix。
以下简单列出一些个人认为非常有用的快捷键。
基本操作
按键 | 功能 |
---|---|
? | 列出所有快捷键;按q返回 |
d | 脱离当前会话,可暂时返回Shell界面,输入tmux attach能够重新进入之前会话 |
$ | 重命名session |
tmux new -s session_name
tmux new -s session_name -d #在后台建立会话
tmux ls #列出会话
tmux attach -t session_name #进入某个会话
窗口操作
按键 | 功能 |
---|---|
c | 创建新窗口 |
& | 关闭当前窗口 |
, | 重命名窗口 |
当前配置中,使用以下按键进行window移动:prefix + ctrl + h,l
也可以直接按prefix+数字来切换对应的window
面板pane操作
按键 | 功能 |
---|---|
“ | 将当前面板上下分屏 |
% | 将当前面板左右分屏 |
x | 关闭当前分屏 |
+ | 最大化当前分屏 |
当前配置中使用以下按键进行pane移动:prefix + h,j,k,l
复杂操作
复制黏贴
-
prefix + [ 进入复制模式
-
使用vim的快捷键到达要复制的位置。
-
按space开始复制,这时候字体变黄表示生效。再使用vim快捷键移动光标。完成之后按enter结束复制。注意这里的space和enter不需要加prefix
-
prefix+] 进行黏贴
ps: 复制黏贴在不同快捷键模式下似乎按键是不同的,在原始配置中没有使用vi模式,死活复制不了。后来,我在配置文件中加入
setw -g mode-keys vi
搞定。
滚动
在pane内部,无法使用上下键鼠标键进行滚动查看bash历史。需要按prefix+[进入复制模式,再去滚动。
update :
一个困扰很久的问题,tmux 2.3 以上无法直接用vim快捷键进行滚动,需要在~/.tmux.conf.local最后加上: bind-key -T copy-mode-vi j send-keys -X page-up
会话保存
Tmux Resurrect
Tmux Resurrect 能够备份 Tmux 会话的各种细节,包括所有会话、窗口、窗格以及它们的顺序,每个窗格的当前工作目录,精确的窗格布局,活动及替代的会话和窗口,窗口聚焦,活动窗格,窗格中运行的程序等等,非常贴心。
要安装 Tmux Resurrect,可执行:
$ cd ~/.tmux
$ git clone https://github.com/tmux-plugins/tmux-resurrect.git
在 ~/.tmux.conf 中添加下列内容:
run-shell ~/.tmux/tmux-resurrect/resurrect.tmux
保存后,重载 Tmux 配置: prefix+r
使用方法:
- prefix + ctrl-s - 保存
- prefix + ctrl-r - 恢复