tmux是什么,可以在一个终端创建窗口,分割panel。平时我们在远程操作服务器时一个信号不稳定,断开连接,那么当前账户登录的任务就被取消了,但是使用 tmux 可以在断开之后继续工作,

安装

brew install tmux
apt-get instalk -y tmux
yum install -y tumx

组成

当运行tumx时,窗口会是这样,由session,window,panel三大部分组成,其中session是一个特定的终端组合。输入tmux就可以打开一个新的session,
而session 中可以有不同的 window(但是同时只能看到一个 window),window 中可以有不同的 panel(可以把 window 分成不同的部分)

启动新会话:

tmux [new -s 会话名 -n 窗口名]

恢复会话:

tmux at [-t 会话名]

列出所有会话:

tmux ls

关闭会话:

tmux kill-session -t 会话名

关闭所有会话:

tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill

在 Tmux 中,按下 Tmux 前缀 ctrl+b,然后:

会话

:new<回车>  启动新会话
s           列出所有会话
$           重命名当前会话

窗口 (标签页)

c  创建新窗口
w  列出所有窗口
n  后一个窗口
p  前一个窗口
f  查找窗口
,  重命名当前窗口
&  关闭当前窗口

调整窗口排序

swap-window -s 3 -t 1  交换 3 号和 1 号窗口
swap-window -t 1       交换当前和 1 号窗口
move-window -t 1       移动当前窗口到 1 号

窗格(分割窗口)

%  垂直分割
"  水平分割
o  交换窗格
x  关闭窗格
⍽  左边这个符号代表空格键 - 切换布局
q 显示每个窗格是第几个,当数字出现的时候按数字几就选中第几个窗格
{ 与上一个窗格交换位置
} 与下一个窗格交换位置
z 切换窗格最大化/最小化

同步窗格

这么做可以切换到想要的窗口,输入 Tmux 前缀和一个冒号呼出命令提示行,然后输入:

1
:setw synchronize-panes

你可以指定开或关,否则重复执行命令会在两者间切换。
这个选项值针对某个窗口有效,不会影响别的会话和窗口。
完事儿之后再次执行命令来关闭。帮助

调整窗格尺寸

如果你不喜欢默认布局,可以重调窗格的尺寸。虽然这很容易实现,但一般不需要这么干。这几个命令用来调整窗格:

PREFIX : resize-pane -D          当前窗格向下扩大 1 格
PREFIX : resize-pane -U          当前窗格向上扩大 1 格
PREFIX : resize-pane -L          当前窗格向左扩大 1 格
PREFIX : resize-pane -R          当前窗格向右扩大 1 格
PREFIX : resize-pane -D 20       当前窗格向下扩大 20 格
PREFIX : resize-pane -t 2 -L 20  编号为 2 的窗格向左扩大 20 格

文本复制模式:

按下前缀 [进入文本复制模式。可以使用方向键在屏幕中移动光标。默认情况下,方向键是启用的。在配置文件中启用 Vim 键盘布局来切换窗口、调整窗格大小。Tmux 也支持 Vi 模式。要是想启用 Vi 模式,只需要把下面这一行添加到 .tmux.conf 中:

setw -g mode-keys vi

启用这条配置后,就可以使用 h、j、k、l 来移动光标了。

想要退出文本复制模式的话,按下回车键就可以了。一次移动一格效率低下,在 Vi 模式启用的情况下,可以辅助一些别的快捷键高效工作。

例如,可以使用 w 键逐词移动,使用 b 键逐词回退。使用 f 键加上任意字符跳转到当前行第一次出现该字符的位置,使用 F 键达到相反的效果。

vi             emacs        功能
^              M-m          反缩进
Escape         C-g          清除选定内容
Enter          M-w          复制选定内容
j              Down         光标下移
h              Left         光标左移
l              Right        光标右移
L                           光标移到尾行
M              M-r          光标移到中间行
H              M-R          光标移到首行
k              Up           光标上移
d              C-u          删除整行
D              C-k          删除到行末
$              C-e          移到行尾
:              g            前往指定行
C-d            M-Down       向下滚动半屏
C-u            M-Up         向上滚动半屏
C-f            Page down    下一页
w              M-f          下一个词
p              C-y          粘贴
C-b            Page up      上一页
b              M-b          上一个词
q              Escape       退出
C-Down or J    C-Down       向下翻
C-Up or K      C-Up         向下翻
n              n            继续搜索
?              C-r          向前搜索
/              C-s          向后搜索
0              C-a          移到行首
Space          C-Space      开始选中
               C-t          字符调序

杂项:

d  退出 tmux(tmux 仍在后台运行)
t  窗口中央显示一个数字时钟
?  列出所有快捷键
:  命令提示符

配置选项:

# 鼠标支持 - 设置为 on 来启用鼠标
* setw -g mode-mouse off
* set -g mouse-select-pane off
* set -g mouse-resize-pane off
* set -g mouse-select-window off

# 设置默认终端模式为 256color
set -g default-terminal "screen-256color"

# 启用活动警告
setw -g monitor-activity on
set -g visual-activity on

# 居中窗口列表
set -g status-justify centre

# 最大化/恢复窗格
unbind Up bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp

seccion

  • tmux new -s session_name 创建一个叫做 session_name 的 tmux session!
  • tmux attach -t session_name 重新开启叫做 session_name 的 tmux session
  • tmux switch -t session_name 转换到叫做 session_name 的 tmux session
  • tmux list-sessions / tmux ls 列出现有的所有 session
  • tmux detach 离开当前开启的 session!
  • tmux kill-server 关闭所有 session

window

  • tmux new-window 创建一个新的 window
  • tmux list-windows
  • tmux select-window -t :0-9 根据索引转到该 window
  • tmux rename-window 重命名当前 window

panel

  • tmux split-window 将 window 垂直划分为两个 pane
  • tmux split-window -h 将 window 水平划分为两个 pane
  • tmux swap-pane -[UDLR] 在指定的方向交换 pane
  • tmux select-pane -[UDLR] 在指定的方向选择下一个 pane

更多命令

在tmux 中直接通过默认前缀 ctrl + b 之后输入对应命令来操作,具体如下

基本操作

  • ? 列出所有快捷键;按q返回
  • d 脱离当前会话,可暂时返回Shell界面
  • s 选择并切换会话;在同时开启了多个会话时使用
  • D 选择要脱离的会话;在同时开启了多个会话时使用
  • : 进入命令行模式;此时可输入支持的命令,例如 kill-server 关闭所有tmux会话
  • [ 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc退出
  • ] 进入粘贴模式,粘贴之前复制的内容,按q/Esc退出
  • ~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
  • t 显示当前的时间
  • ctrl + z 挂起当前会话

窗口操作

  • c 创建新窗口!#默认是最大化
  • & 关闭当前窗口!
  • [0-9] 数字键切换到指定窗口
  • p 切换至上一窗口
  • n 切换至下一窗口
  • l 前后窗口间互相切换
  • w 通过窗口列表切换窗口
  • , 重命名当前窗口,便于识别
  • . 修改当前窗口编号,相当于重新排序
  • f 在所有窗口中查找关键词,便于窗口多了切换

面板操作

  • “ 将当前面板上下分屏(我自己改成了 |)!
  • % 将当前面板左右分屏(我自己改成了 -)!
  • x 关闭当前分屏!
  • ! 将当前面板置于新窗口,即新建一个窗口,其中仅包含当前面板
  • ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
  • alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
  • q 显示面板编号
  • o 选择当前窗口中下一个面板
  • 方向键 移动光标选择对应面板
  • { 向前置换当前面板
  • } 向后置换当前面板
  • alt+o 逆时针旋转当前窗口的面板
  • ctrl+o 顺时针旋转当前窗口的面板
  • z 最大化当前所在面板
  • page up 向上滚动屏幕,q 退出
  • page down 向下滚动屏幕,q 退出

    配置文件

    和vim类似,tumx也可以使用配置文件,修改 ~/.tmux.conf 即可。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #-- base --#
    set -g default-terminal "screen-256color"
    set -g display-time 3000
    set -g history-limit 10000
    set -g base-index 1
    set -g pane-base-index 1
    set -s escape-time 0
    set -g mouse on
    #-- bindkeys --#
    # split windows like vim. - Note: vim's definition of a horizontal/vertical split is reversed from tmux's
    unbind s
    bind s split-window -v
    bind S split-window -v -l 40
    bind v split-window -h
    bind V split-window -h -l 120
    # navigate panes with hjkl
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    # key bindings for horizontal and vertical panes
    unbind %
    bind | split-window -h # 使用|竖屏,方便分屏
    unbind '"'
    bind - split-window -v # 使用-横屏,方便分屏
    # swap panes
    bind ^u swapp -U
    bind ^d swapp -D
    bind q killp
    bind ^e last
    unbind r
    bind r source-file ~/.tmux.conf \; display "Configuration Reloaded!"
    #-- statusbar --#
    set -g status-justify centre
    set -g status-left "#[fg=red]s#S:w#I.p#P#[default]"
    set -g status-right '[#(whoami)#(date +" %m-%d %H:%M ")]'
    set -g status-left-attr bright
    set -g status-left-length 120
    set -g status-right-length 120
    set -g status-utf8 on
    set -g status-interval 1
    set -g visual-activity on
    setw -g monitor-activity on
    setw -g automatic-rename off
    # default statusbar colors
    set -g status-bg colour235 #base02
    set -g status-fg colour136 #yellow
    set -g status-attr default
    # default window title colors
    setw -g window-status-fg colour244
    setw -g window-status-bg default
    #setw -g window-status-attr dim
    # active window title colors
    setw -g window-status-current-fg colour166 #orange
    setw -g window-status-current-bg default
    #setw -g window-status-current-attr bright
    # window title string (uses statusbar variables)
    set -g set-titles-string '#T'
    set -g status-justify "centre"
    set -g window-status-format '#I #W'
    set -g window-status-current-format ' #I #W '
    # pane border
    set -g pane-active-border-fg '#55ff55'
    set -g pane-border-fg '#555555'
    # message text
    set -g message-bg colour235 #base02
    set -g message-fg colour166 #orange
    # pane number display
    set -g display-panes-active-colour colour33 #blue
    set -g display-panes-colour colour166 #orange
    # clock
    setw -g clock-mode-colour colour64 #green
    # 修改进入命令模式按键
    # remap prefix to Control + a
    # set -g prefix C-a
    # unbind C-b
    # bind C-a send-prefix

参考
http://wdxtub.com/2016/03/30/tmux-guide/
https://gist.github.com/ryerh/14b7c24dfd623ef8edc7
两个比较好的tmux配置
https://github.com/gpakosz/.tmux
https://github.com/erikw/tmux-powerline