今天試用了一下 tmux,發現簡直是神器!之前還傻傻不停開窗口,如今一個窗口就能夠都搞定啦!緩存
更新記錄服務器
- 2016.03.30: 初稿
Tmux 簡單來講就是終端裏的『窗口管理器』,若是我使用終端登陸到遠程主機並運行前臺程序,那麼這個窗口等於就被佔用了,想要看一下 CPU 的使用率,就得再鏈接一次。可是若是在遠程主機上運行 tmux,那麼就能夠開啓多個控制檯(相似於窗口),至關高效,比方說能夠像下面這樣:session
須要注意的是,這裏是在我本地使用 tmux,最好在遠程主機也安裝 tmux,這樣就只須要鏈接一次。
Hello World
前面提到的窗口管理只是 tmux 功能的一小部分,另外一個頗有用的功能就是,鏈接到遠程主機以後,一旦斷開,那麼當前帳戶登陸的任務就被取消了,可是使用 tmux 能夠在斷開以後繼續工做,下次登陸能夠查看。其餘的功能還有:
- 窗口切換,每一個窗口裏還能夠分割面板
- 配置方便,可使用腳本
- 相似 vim 的雙層操做邏輯
- 複製粘貼緩衝區
安裝的話也很簡單,在 mac 下直接 brew install tmux
(前提須要安裝 homebrew),ubuntu 下則直接 sudo apt-get install tmux
在終端中輸入 tmux
就能夠打開一個新的 tmux session,tmux 的全部操做必須先使用一個前綴鍵(默認是 ctrl + b
)進入命令模式,或者說進入控制檯,就像 vim 中的 esc。
基本操做
信息查詢
tmux list-keys
列出全部能夠的快捷鍵和其運行的 tmux 命令tmux list-commands
列出全部的 tmux 命令及其參數tmux info
流出全部的 session, window, pane, 運行的進程號,等。
窗口控制
先來看看在 tmux 以外如何進行控制
- session 會話:session是一個特定的終端組合。輸入tmux就能夠打開一個新的session
tmux new -s session_name
建立一個叫作session_name
的 tmux sessiontmux attach -t session_name
從新開啓叫作session_name
的 tmux sessiontmux switch -t session_name
轉換到叫作session_name
的 tmux sessiontmux list-sessions
/tmux ls
列出現有的全部 sessiontmux detach
離開當前開啓的 sessiontmux kill-server
關閉全部 session
- window 窗口:session 中能夠有不一樣的 window(可是同時只能看到一個 window)
tmux new-window
建立一個新的 windowtmux list-windows
tmux select-window -t :0-9
根據索引轉到該 windowtmux rename-window
重命名當前 window
- pane 面板:window 中能夠有不一樣的 pane(能夠把 window 分紅不一樣的部分)
tmux split-window
將 window 垂直劃分爲兩個 panetmux split-window -h
將 window 水平劃分爲兩個 panetmux swap-pane -[UDLR]
在指定的方向交換 panetmux 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 退出
由於 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
|
最終的效果是