命令行工具中的瑞士軍刀 - tmux

Tmux 簡單來講就是終端裏的『窗口管理器』,若是我使用終端登陸到遠程主機並運行前臺程序,那麼這個窗口等於就被佔用了,想要看一下 CPU 的使用率,就得再鏈接一次。可是若是在遠程主機上運行 tmux,那麼就能夠開啓多個控制檯(相似於窗口),至關高效。
html

Hello World

前面提到的窗口管理只是 tmux 功能的一小部分,另外一個頗有用的功能就是,鏈接到遠程主機以後,一旦斷開,那麼當前帳戶登陸的任務就被取消了,可是使用 tmux 能夠在斷開以後繼續工做,下次登陸能夠查看。其餘的功能還有:linux

  1. 窗口切換,每一個窗口裏還能夠分割面板
  2. 配置方便,可使用腳本
  3. 相似 vim 的雙層操做邏輯
  4. 複製粘貼緩衝區

安裝的話也很簡單,在 mac 下直接 brew install tmux(前提須要安裝 homebrew),ubuntu 下則直接 sudo apt-get install tmuxgit

在終端中輸入 tmux 就能夠打開一個新的 tmux session,tmux 的全部操做必須先使用一個前綴鍵(默認是 ctrl + b)進入命令模式,或者說進入控制檯,就像 vim 中的 esc。github

基本操做

信息查詢ubuntu

  • tmux list-keys 列出全部能夠的快捷鍵和其運行的 tmux 命令
  • tmux list-commands 列出全部的 tmux 命令及其參數
  • tmux info 流出全部的 session, window, pane, 運行的進程號,等。

窗口控制vim

先來看看在 tmux 以外如何進行控制windows

  • session 會話:session是一個特定的終端組合。輸入tmux就能夠打開一個新的session
    • 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 窗口:session 中能夠有不一樣的 window(可是同時只能看到一個 window)
    • tmux new-window 建立一個新的 window
    • tmux list-windows
    • tmux select-window -t :0-9 根據索引轉到該 window
    • tmux rename-window 重命名當前 window
  • pane 面板:window 中能夠有不一樣的 pane(能夠把 window 分紅不一樣的部分)
    • tmux split-window 將 window 垂直劃分爲兩個 pane
    • tmux split-window -h 將 window 水平劃分爲兩個 pane
    • tmux swap-pane -[UDLR] 在指定的方向交換 pane
    • tmux select-pane -[UDLR] 在指定的方向選擇下一個 pane

更經常使用的是在 tmux 中直接經過默認前綴 ctrl + b 以後輸入對應命令來操做,具體以下(這裏只列出輸入默認前綴以後須要輸入的操做):緩存

基本操做bash

  • ? 列出全部快捷鍵;按q返回
  • d 脫離當前會話,可暫時返回Shell界面
  • s 選擇並切換會話;在同時開啓了多個會話時使用
  • D 選擇要脫離的會話;在同時開啓了多個會話時使用
  • : 進入命令行模式;此時可輸入支持的命令,例如 kill-server 關閉全部tmux會話
  • [ 複製模式,光標移動到複製內容位置,空格鍵開始,方向鍵選擇複製,回車確認,q/Esc退出
  • ] 進入粘貼模式,粘貼以前複製的內容,按q/Esc退出
  • ~ 列出提示信息緩存;其中包含了以前tmux返回的各類提示信息
  • t 顯示當前的時間
  • ctrl + z 掛起當前會話

窗口操做session

  • 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 退出

由於 iTerm2 的支持,不少切換的操做能夠直接用鼠標進行,很是方便。具體你們能夠本身嘗試一下。

配置

咱們能夠先進行一些簡單的配置,修改 ~/.tmux.conf 便可,讓整個使用更方便。

#-- 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
複製代碼

參考連接

相關文章
相關標籤/搜索