zoukankan      html  css  js  c++  java
  • linux下的终端利器----tmux

    转:tmux 是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件。类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;当然其功能远不止于此。

    Tmux("Terminal Multiplexer"的简称) 可以让我们在单个屏幕的灵活布局下开出很多终端,我们就可以协作地使用它们。举个例子,在一个面板中,我们用Vim修改一些配置文件,在另一个面板,我们使用irssi聊天,而在其余的面板,可以跟踪一些日志。然后,我们还可以打开新的窗口来升级系统,再开一个新窗口来进行服务器的ssh连接。在这些窗口面板间浏览切换和创建它们一样简单。它的高度可配置和可定制的,让其成为你心中的延伸

    我们可以借助Tmux构建出复杂的开发环境,同时还可以在一旁进行SSH远程连接。可以开出很多窗口,将其拆分成很多面板,接管和分离会话等等

    这里写图片描述

    tmux的优势


    *  提供了强劲的、易于使用的命令行界面。
    *  可横向和纵向分割窗口。
    *  窗格可以自由移动和调整大小,或直接利用四个预设布局之一。
    *  支持 UTF-8 编码及 256 色终端。
    *  可在多个缓冲区进行复制和粘贴。
    *  可通过交互式菜单来选择窗口、会话及客户端。
    *  支持跨窗口搜索。
    *  支持自动及手动锁定窗口。
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    tmux安装


    sudo apt-get install tmux
    • 1

    tmux使用详解


    安装完成后输入命令tmux即可打开软件,界面十分简单,类似一个下方带有状态栏的终端控制台;

    但根据tmux的定义,在开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板;
    也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板,虽然其使用方法与终端控制台完全相同。
    tmux使用C/S模型构建,主要包括以下单元模块:

    模块名称描述
    server 服务器 输入tmux命令时就开启了一个服务器
    session 会话 一个服务器可以包含多个会话
    window 窗口 一个会话可以包含多个窗口
    panel 面板 一个窗口可以包含多个面板

    session会话


    使用Tmux 的最好方式是使用会话的方式,这样你就可以以你想要的方式,将任务和应用组织到不同的会话中。如果你想改变一个会话,会话里面的任何工作都无须停止或者杀掉。让我们来看看这是怎么工作的。
    让我们开始一个叫做”session”的会话,并且运行top命令

    tmux new -s new session
    top
    • 1
    • 2

    tmux命令


    类似各种平铺式窗口管理器,tmux使用键盘操作,常用快捷键包括:
    我们在终端中输入Ctrl+b,则激活控制台;此时以下按键生效,然后输入一下命令即可进行操作。

    系统操作命令


    命令描述
    列出所有快捷键;按q返回
    d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
    D 选择要脱离的会话;在同时开启了多个会话时使用
    Ctrl+z 挂起当前会话
    r 强制重绘未脱离的会话
    s 选择并切换会话;在同时开启了多个会话时使用
    : 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
    [ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
    ~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息

    窗口操作


    命令描述
    c 创建新窗口
    & 关闭当前窗口
    数字键 切换至指定窗口
    p 切换至上一窗口
    n 切换至下一窗口
    l 在前后两个窗口间互相切换
    w 通过窗口列表切换窗口
    , 重命名当前窗口;这样便于识别
    . 修改当前窗口编号;相当于窗口重新排序
    f 在所有窗口中查找指定文本

    面板操作


    命令描述
    将当前面板平分为上下两块
    % 将当前面板平分为左右两块
    x 关闭当前面板
    ! 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
    Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
    Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
    Space 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
    q 显示面板编号
    o 在当前窗口中选择下一面板
    方向键 移动光标以选择面板
    { 向前置换当前面板
    } 向后置换当前面板
    Alt+o 逆时针旋转当前窗口的面板
    Ctrl+o 顺时针旋转当前窗口的面板

    tmux配置


    tmux 的系统级配置文件为/etc/tmux.conf ,用户级配置文件为~/.tmux.conf 。配置文件实际上就是tmux 的命令集合,也就是说每行配置均可在进入命令行模式后输入生效。
    下面是一个~/.tmux.conf 的示例,其中包括了一些常用的配置:

    #此类配置可以在命令行模式中输入show-options -g查询
    set-option -g base-index 1 #窗口的初始序号;默认为0,这里设置为1
    set-option -g display-time 5000 #提示信息的持续时间;设置足够的时间以避免看不清提示,单位为毫秒
    set-option -g repeat-time 1000 #控制台激活后的持续时间;设置合适的时间以避免每次操作都要先激活控制台,单位为毫秒
    set-option -g status-keys vi #操作状态栏时的默认键盘布局;可以设置为vi或emacs
    set-option -g status-right "#(date +%H:%M' ')" #状态栏右方的内容;这里的设置将得到类似23:59的显示
    set-option -g status-right-length 10 #状态栏右方的内容长度;建议把更多的空间留给状态栏左方(用于列出当前窗口)
    set-option -g status-utf8 on 开启状态栏的UTF-8支持
    #此类设置可以在命令行模式中输入show-window-options -g查询
    set-window-option -g mode-keys vi #复制模式中的默认键盘布局;可以设置为vi或emacs
    set-window-option -g utf8 on #开启窗口的UTF-8支持
    #将激活控制台的快捷键由Ctrl+b修改为Ctrl+a
    set-option -g prefix C-aunbind-key C-bbind-key C-a send-prefix
    #添加自定义快捷键
    bind-key z kill-session #按z结束当前会话;相当于进入命令行模式后输入kill-session
    bind-key h select-layout even-horizontal #按h将当前面板布局切换为even-horizontal;相当于进入命令行模式后输入select-layout even-horizontal
    bind-key v select-layout even-vertical #按v将当前面板布局切换为even-vertical;相当于进入命令行模式后输入select-layout even-vertical

    1

    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    下面是我的配置文件信息

    # author: Gatieme
    # time: 2015年 10月 21日 星期三 11:13:54 CST
    # Usage: mv tmux_conf.txt ~/.tmux.conf
    #------------------------------------------
    
    #-- base --#
    set -g default-terminal "screen"
    set -g display-time 3000
    set -g history-limit 65535
    #----------------------------------------------
    
    #将默认按键前缀改为与C-i避免与终端快捷键冲突--已取消
    #set-option -g prefix C-i
    #unbind-key C-b
    #bind-key C-i send-prefix
    #----------------------------------------------
    
    #按键绑定
    
    
    #水平或垂直分割窗口 (C+A+ :split-window + v/h)
    # 默认的使用"上下分割和%左右分割实在有点不好记忆
    unbind '"'
    bind - splitw -v #分割成上下两个窗口
    unbind %
    bind | splitw -h #分割成左右两个窗口
    #----------------------------------------------
    
    #选择分割的窗格
    bind k selectp -U #选择上窗格
    bind j selectp -D #选择下窗格
    bind h selectp -L #选择左窗格
    bind l selectp -R #选择右窗格
    #----------------------------------------------
    
    #重新调整窗格的大小
    bind ^k resizep -U 10
    bind ^j resizep -D 10
    bind ^h resizep -L 10
    bind ^l resizep -R 10
    #----------------------------------------------
    
    #交换两个窗格
    bind ^u swapp -U
    bind ^d swapp -D
    
    bind ^a last
    bind q killp
    #----------------------------------------------
    
    bind '~' splitw htop
    bind ! splitw ncmpcpp
    bind m command-prompt "splitw -h 'exec man %%'"
    
    unbind s
    #----------------------------------------------
    
    #定制状态行
    
    set -g status-left "#[fg=white,bg=blue] > #I < #[default] |" # 0:bash
    #set -g status-left "#[fg=white,bg=blue] > #I < #[default] |" # session-name
    set -g status-right "#[fg=yellow,bright][ #[fg=cyan]#W #[fg=yellow]]#[default] #[fg=yellow,bright]- %Y.%m.%d #[fg=green]%H:%M #[default]"
    set -g status-right-attr bright
    
    set -g status-bg black
    set -g status-fg white
    set -g set-clipboard on
    
    setw -g window-status-current-attr bright
    #setw -g window-status-current-bg red
    setw -g window-status-current-bg green
    setw -g window-status-current-fg white
    
    set -g status-utf8 on
    set -g status-interval 1
    
    #set -g visual-activity on
    #setw -g monitor-activity on
    
    set -g status-keys vi
    #----------------------------------------------
    
    setw -g mode-keys vi
    setw -g mode-mouse on
    
    #setw -g mouse-resize-pane on
    #setw -g mouse-select-pane on
    #setw -g mouse-select-window on
    
    # move x clipboard into tmux paste buffer
    bind C-p run "tmux set-buffer "$(xclip -o -sel clipbaord)"; tmux paste-buffer"
    # move tmux copy buffer into x clipboard
    bind C-y run "tmux show-buffer | xclip -i -sel clipbaord"
    
    #默认启动应用
    # 你可以根据自己的需求自己定制启动应用
    #new -s work # 新建名为 work 的会话,并启动 mutt
    #neww rtorrent # 启动 rtorrent
    #neww vim # 启动 vim
    #neww zsh
    #selectw -t 3 # 默认选择标号为 3 的窗口
    • 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
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101

    此外,像Tmuxinator 或者 Tmuxifier这样的工具,可以简化Tmux会话,窗口和面板的创建及加载,你可以很容易就配置Tmux。如果你没有使用过这些,尝试一下吧!
    网上发现的比较好的一些配置信息
    https://github.com/xuxiaodong/tmuxen
    https://linuxtoy.org/archives/scripting-tmux.html
    自动化启动tmux的脚本

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/hrnn/p/13523811.html
Copyright © 2011-2022 走看看