Tmux 簡介與使用

Tmux 是一個用於在終端窗口中運行多個終端會話的工具,即終端複用軟件(terminal multiplexer)。在 Tmux 中能夠根據不一樣的工做任務建立不一樣的會話,每一個會話又能夠建立多個窗口來完成不一樣的工做,每一個窗口又能夠分割成不少小窗口。這些功能都是很是實用的。html

Tmux 的多窗口和窗口分割並非它吸引的我緣由,對於這一點我能夠有另一個終端工具代替,即 Terminator。使用 Tmux 最大的益處在於,遠程 SSH 訪問服務器進行工做時。即便非正常掉線,它能保存當前工做狀態,並保證當前任務繼續運行。這一點對於遠程 SSH 工做的人來講是很是重要的。遠程 ssh 工做時,Tmux 的多會話、多窗口、多面板的益處才充分體現了出來。使用 Tmux 就沒必要開啓多個標籤鏈接多個 ssh 了,全部工做在一個 ssh 鏈接上就搞定了,也沒必要擔憂忽然掉線後工做丟失。git

與 Tmux 相似的軟件還有 screen、dvtm、splitvt、byobu 等。github

會話, 窗口, 窗格

根據 Tmux 的定義,在開啓了 Tmux 服務器後,會首先建立一個會話,而這個會話則會首先建立一個窗口,其中僅包含一個窗格;也就是說,這裏看到的所謂終端控制檯應該稱做 Tmux 的一個窗格,雖然其使用方法與終端控制檯徹底相同。vim

Tmux 使用 C/S 模型構建,主要包括如下單元模塊:windows

  • server 服務器:輸入 tmux 命令時就開啓了一個服務器,服務器因爲管理多個會話。
  • session 會話:一個服務器能夠包含多個會話,能夠理解成是一個特定的終端組合,一般將同一任務下的工做放到一個會話中。
  • window 窗口:一個會話能夠包含多個窗口,一個窗口就至關於普通終端的一個標籤,一般在不一樣的窗口中完成不一樣的工做。
  • pane 窗格:一個窗口能夠被分割成多個小的窗格。

會話,窗口和窗格是 Tmux 的基本概念,在使用 Tmux 以前必需要理解他們的含義。緩存

安裝

在 Mac OS 中安裝:服務器

$ brew install tmuxsession

在 Ubuntu 中安裝:ssh

sudo apt-get install tmuxide

或者下載源碼編譯安裝:https://tmux.github.io/

基本使用

對 Tmux 的操做都是用命令或者快捷鍵來完成的,在使用 Tmux 快捷鍵時都須要加上一個命令前綴(prefix),即 Ctrl+b。快捷鍵的使用方法是,按下組合鍵 Ctrl-b,接着放開組合鍵 Ctrl-b,接着再按相關的快捷鍵。若是你以爲 Ctrl+b 使用起來不方便,能夠重定義命令前綴,在配置文件 ~/.tmux.conf 中添加以下內容:

# remap prefix from 'C-b' to 'C-a'
unbind C-b
set -g prefix C-a
bind-key C-a send-prefix

運行 tmux 命令直接新建一會話,並進入:

tmux

每個會話都有一個編號或者名字,用於在會話間切換或者從新鏈接會話。可是記住每一個會話的編號並不容易,固然,咱們在新建會話時能夠指定一個名字,以便於記憶:

tmux new -s mysession

或者:

tmux new-session -s mysession

使用快捷鍵 prefix + d 能夠暫時離開當前會話,若是要再次鏈接之前的某個會話,能夠用以下命令:

tmux attach -t <session-name>

或者:

tmux attach-session -t <session-name>

或者簡寫成:

tmux a -t <session-name>

要殺掉會話,能夠用以下命令:

tmux kill-session -t <session-name>

或者殺死全部會話:

tmux kill-server

經常使用命令

  • 信息查詢:

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

    • 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
  • 窗口控制:

    • tmux new-window 建立一個新的 window
    • tmux list-windows 列出全部的 window
    • tmux select-window -t :0-9 根據索引轉到該 window
    • tmux rename-window 重命名當前 window
  • 窗格控制:

    • tmux split-window 將 window 垂直劃分爲兩個 pane
    • tmux split-window -h 將 window 水平劃分爲兩個 pane
    • tmux swap-pane -[UDLR] 在指定的方向交換 pane
    • tmux select-pane -[UDLR] 在指定的方向選擇下一個 pane

經常使用快捷鍵

全部快捷鍵的使用都必須加上命令前綴(prefix), 默認是 Ctrl+b

  • 基本操做:
命令 說明
? 列出全部快捷鍵;按q返回
d 脫離當前會話,可暫時返回Shell界面
s 選擇並切換會話;在同時開啓了多個會話時使用
D 選擇要脫離的會話;在同時開啓了多個會話時使用
: 進入命令行模式;此時可輸入支持的命令,例如 kill-server 關閉全部tmux會話
[ 複製模式,光標移動到複製內容位置,空格鍵開始,方向鍵選擇複製,回車確認,q/Esc退出
] 進入粘貼模式,粘貼以前複製的內容,按q/Esc退出
~ 列出提示信息緩存;其中包含了以前tmux返回的各類提示信息
t 顯示當前的時間
  • 窗口操做:
命令 說明
c 建立新窗口
& 關閉當前窗口
[0-9] 數字鍵切換到指定窗口
p 切換至上一窗口
n 切換至下一窗口
l 先後窗口間互相切換
w 經過窗口列表切換窗口
, 重命名當前窗口,便於識別
. 修改當前窗口編號,至關於從新排序
f 在全部窗口中查找關鍵詞,便於窗口多了切換
  • 窗格操做:
命令 說明
" 將當前面板上下分屏
% 將當前面板左右分屏
x 關閉當前分屏
! 將當前面板置於新窗口,即新建一個窗口,其中僅包含當前面板
q 顯示面板編號
o 選擇當前窗口中下一個面板
{ 向前置換當前面板
} 向後置換當前面板
z 最大化當前所在面板
方向鍵 移動光標選擇對應面板
page up 向上滾動屏幕,q 退出
page down 向下滾動屏幕,q 退出
alt+o 逆時針旋轉當前窗口的面板
ctrl+o 順時針旋轉當前窗口的面板
ctrl+方向鍵 以1個單元格爲單位移動邊緣以調整當前面板大小
alt+方向鍵 以5個單元格爲單位移動邊緣以調整當前面板大小

複製模式(copy-mode)

Tmux 的使用相似於 vim, 在窗口中要自由的複製文本,能夠進入複製模式,使用 prefix + [ 進入複製模式:

  • 按 space 開始複製,移動光標選擇複製區域
  • 按 Enter 複製並退出 copy-mode。
  • 將光標移動到指定位置,按 prefix + ] 粘貼

配置

Tmux 支持自定義的配置文件,/etc/tmux.conf 是全局的配置,~/.tmux.conf 是用戶配置。例如 Tmux 也能夠想 vim 同樣使用底行命令模式,咱們從新配置其快捷鍵跟 vim 同樣使用 :,在配置文件中添加以下內容:

# bind : to command-prompt like vim
# this is the default in tmux already
bind : command-prompt

在命令行模式下能夠輸入 tmux 的命令來執行相關動做。

參考

相關文章
相關標籤/搜索