Liu Shouda coder

tmux

2016-09-28

tmux是非常好用的终端复用工具。对于远程操作linux可以大大提升效率。

为什么使用tmux

  1. 终端混乱。没有使用tmux的时候,终端界面正常工作的时候大概是下图这样子。每台机器由于可能同时在多个目录下进行编辑,运行,监测,所以每台机器可能占用多个终端tab位置。这样导致tab很多,而且机器之间还可能混淆,在要执行一条命令时候不好找到对应的终端。
  2. 连接中断问题。而且在ssh远程登陆一般不敢跑大的训练程序,万一网络不稳定,或者机器死机,不小心关闭终端等都可能造成前功尽弃。
  3. 复用问题。打开很多窗口在不同机器上无法复用。客户端关机后就消失。

使用后tmux之后终端大概是下图这个样子,每台机器基本上只需要一个tab。而且由于强悍的分屏功能,使得在一个界面上同时写代码,运行,检查结果非常方便。

这里简单介绍一下tmux的基本概念。上图有3个分屏界面,每个分屏界面称为pane。这3个分屏界面共同构成一个window。一个会话可以包含多个window。上图中左下角处,显示当前有两个window,可以使用快捷键进行window的切换。层次等级如下:

  • session
    • window
      • pane

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

复杂操作

复制黏贴

  1. prefix + [ 进入复制模式

  2. 使用vim的快捷键到达要复制的位置。

  3. 按space开始复制,这时候字体变黄表示生效。再使用vim快捷键移动光标。完成之后按enter结束复制。注意这里的space和enter不需要加prefix

  4. 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 - 恢复

上一篇 gpu cluster搭建

下一篇 merlin

Content