Tmux使用及配置



  • Tmux 是什么?

    tmux 是一个优秀的终端复用器类自由软件,功能类似 GNU Screen,但使用 BSD 许可发布。用户可以通过 tmux 在一个终端内管理多个分离的会话,窗口及面板,对于同时使用多个命令行,或多个任务时非常方便。

    tmux 采用 client/server 模型,主要由以下模块组成:

    模块 简介
    server 服务。tmux 运行的基础服务,以下模块均依赖此服务。
    session 会话。一个服务可以包含多个会话。
    window 窗口。一个会话可以包含多个窗口。
    panel 面板。一个窗口可以包含多个面板。

    执行 tmux 命令时就开启了一个服务并创建了一个会话,窗口和面板。

    特点

    • 一个虚拟终端可以管理多个会话,窗口和面板
    • 支持分屏,同时处理多个操作
    • 窗口、面板可以在会话间自由移动,切换
    • 丰富灵活的状态行展示
    • 支持自定义快捷键,依照个人习惯配置令操作更高效
    • 不受断网影响,避免丢失重要工作进度
    • 结对编程,方便演示与协作
    • 自带复制粘贴缓冲区管理
    • 脚本化配置,可配置多种操作环境

    以上内容都来自于 - Wikipedia

    接下来谈谈Tmux的具体使用

    安装

    brew install tmux       # OSX
    pacman -S tmux          # archlinux
    apt-get install tmux    # Ubuntu
    yum install tmux        # Centos
    
    

    使用

    0_1524649211154_e5f30468-0f1a-4b01-acec-19e08122f49f-image.png

    • 默认的快捷键:<Ctrl+B>
    • 配置文件:~/.tmux.conf

    因为Tmux是一个维持终端会话的工具,要执行Tmux的快捷键时需要先按<prefix>,这类似Vim的Leader。

    默认快捷键

    :new<CR> # 创建新的 Session,其中 : 是进入 Tmux 命令行的快捷键
    s        # 列出所有 Session,可通过 j, k, 回车切换
    $        # 为当前 Session 命名
    c        # 创建 Window
    <n>      # 切换到第 n 个 Window
    ,        # 为当前 Window 命名
    %        # 垂直切分 Pane
    "        # 水平切分 Pane
    <space>  # 切换 Pane 布局
    d        # detach,退出 Tmux Session,回到父级 Shell
    t        # 显示一个时钟,:)
    ?        # 快捷键帮助列表
    

    使用Vim快捷键

    # 复制模式中的默认键盘布局使用vi
    set-window-option -g mode-keys vi
    
    # 使用vi 键盘布局移动光标
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    
    

    当配置使用Vi模式时,键入<prefix> 后:

    • 使用hjkl 移动光标
    • 使用空格选中需要被复制的内容
    • 使用y复制内容
    • 使用q退出复制模式

    面板控制

    窗口大小

    
    # 向左扩展
    bind -r H resize-pane -L 10
    # 向右扩展
    bind -r L resize-pane -R 10
    # 向上扩展
    bind -r K resize-pane -U 5
    # 向下扩展
    bind -r J resize-pane -D 5
    
    

    窗口分屏

    # 使用|竖屏,方便分屏(默认为%)
    bind | split-window -h -c "#{pane_current_path}"
    
    # 使用-横屏,方便分屏(默认为")
    bind - split-window -v -c "#{pane_current_path}"
    

    使用系统剪切板

    Vim、Tmux、系统共用剪切板

    插件

    • tmux-plugins/tpm : Tmux的插件管理,与Vim的Vundle类似
    • tmux-plugins/tmux-sensible 和 tmux-plugins/tmux-resurrect:会话的保存与恢复
    • tmux-plugins/tmux-cpu: 系统CPU的使用情况
    • tmux-plugins/tmux-battery: 系统电量的使用情况
    • tmux-plugins/tmux-prefix-highlight: 高亮<prefix>的键入

    具体插件使用在Github搜索插件名称吧


    献上我的配置

    #--------------------------------------------------------------------------
    # 插件设置 
    
    set -g @plugin 'tmux-plugins/tpm'
    set -g @plugin 'tmux-plugins/tmux-sensible'
    set -g @plugin 'tmux-plugins/tmux-cpu'
    set -g @plugin 'tmux-plugins/tmux-battery'
    set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
    set -g @plugin 'tmux-plugins/tmux-resurrect'
    
    
    #--------------------------------------------------------------------------
    # 说明
    # bind-key == bind
    # unbind-key == unbind
    # bind -r 可以重复执行
    # bind -n 绑定到全局,不需要按prefix
    
    
    #--------------------------------------------------------------------------
    # 按键绑定
    
    # 复制模式中的默认键盘布局使用vi
    set-window-option -g mode-keys vi
    
    # 使用vi 键盘布局移动光标
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    
    # 向左扩展
    bind -r H resize-pane -L 10
    # 向右扩展
    bind -r L resize-pane -R 10
    # 向上扩展
    bind -r K resize-pane -U 5
    # 向下扩展
    bind -r J resize-pane -D 5
    
    # 上一个窗口
    bind-key ` last-window
    
    # 使用esc进入复制模式
    bind Escape copy-mode
    bind -T copy-mode-vi 'v' send -X begin-selection
    
    
    # 系统剪切板
    # https://robots.thoughtbot.com/how-to-copy-and-paste-with-tmux-on-mac-os-x
    # MacOS: brew install reattach-to-user-namespace
    bind -T copy-mode-vi 'y' send -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'
    
    
    unbind p
    bind p pasteb
    
    
    # key bindings for horizontal and vertical panes
    # 使用|竖屏,方便分屏
    #unbind %
    bind | split-window -h -c "#{pane_current_path}"
    
    # 使用-横屏,方便分屏
    # unbind '"'
    bind - split-window -v -c "#{pane_current_path}"
    
    # 使用prefix + r 重新加载配置文件
    bind r source-file ~/.tmux.conf \; display "Reloaded!"
    
    
    #--------------------------------------------------------------------------
    # 基本功能性设置
    
    # 禁用自动重命名
    set -wg allow-rename off
    set -wg automatic-rename off
    
    # 开启鼠标的支持
    set -g mouse on
    
    # 使用zsh环境
    set-option -g default-shell /bin/zsh
    
    # 显色样式
    set -g default-terminal "xterm-256color"
    set-option -ga terminal-overrides ",xterm-256color:Tc"
    
    # 自定义的主题
    
    # Powerline Gray - Tmux Theme
    # Created by Jim Myhrberg <[email protected]>.
    #
    # Inspired by vim-powerline: https://github.com/Lokaltog/powerline
    #
    # Requires terminal to be using a powerline compatible font, find one here:
    # https://github.com/Lokaltog/powerline-fonts
    #
    # Status update interval
    set -g status-interval 1
    
    # Basic status bar colors
    set -g status-fg colour238
    set -g status-bg colour233
    
    # Left side of status bar
    set -g status-left-bg colour233
    set -g status-left-fg colour243
    set -g status-left-length 100
    set -g status-left "#[fg=colour232,bg=colour245,bold] #S #[fg=colour245,bg=colour240,nobold]#[fg=colour233,bg=colour240] #(whoami) #[fg=colour240,bg=colour235]#[fg=colour240,bg=colour235] #I:#P #[fg=colour235,bg=colour233,nobold] | #{prefix_highlight} "
    
    # Right side of status bar
    set -g status-right-bg colour233
    set -g status-right-fg colour243
    set -g status-right-length 300
    set -g status-right "#{cpu_percentage} / #{battery_percentage} #[fg=#1f1f1f,bg=#121212]#[fg=#989898,bg=#1f1f1f] LookAtYourself #[fg=colour235,bg=#1f1f1f]#[fg=colour240,bg=colour235] %H:%M:%S #[fg=colour240,bg=colour235]#[fg=colour233,bg=colour240] %m/%d #[fg=colour245,bg=colour240]#[fg=colour232,bg=colour245,bold] #H " 
    
    # Window status
    set -g window-status-format "  #I:#W#F  "
    set -g window-status-current-format "#[fg=colour233,bg=black]#[fg=colour250,nobold] #I:#W#F #[fg=colour233,bg=black,nobold]"
    
    # Current window status
    set -g window-status-current-bg black
    set -g window-status-current-fg colour250
    
    # Window with activity status
    set -g window-status-activity-bg colour243 # fg and bg are flipped here due to
    set -g window-status-activity-fg colour233 # a bug in tmux
    
    # Window separator
    set -g window-status-separator ""
    
    # Window status alignment
    set -g status-justify centre
    set -g status-position bottom 
    
    # Pane border
    set -g pane-border-bg default
    set -g pane-border-fg colour235
    
    # Active pane border
    set -g pane-active-border-bg default
    set -g pane-active-border-fg colour240
    
    # Pane number indicator
    set -g display-panes-colour colour233
    set -g display-panes-active-colour colour245
    
    # Clock mode
    set -g clock-mode-colour colour240
    set -g clock-mode-style 24
    
    # Message
    set -g message-bg colour245
    set -g message-fg colour232
    
    # Command message
    set -g message-command-bg colour233
    set -g message-command-fg colour250
    
    # Mode
    set -g mode-bg colour243
    set -g mode-fg colour232
    
    
    
    # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
    run '~/.tmux/plugins/tpm/tpm'
    
    
    ```tmux-screenshots.png

登录后回复