參考
http://os.51cto.com/art/201410/453671.htm
tmux簡單教程
大家也可以使用byobu(增強版的screen)
博文更新日志
2020/10/06 [1] 感謝 crawling_snail, 幫忙修正一處筆誤.
1 tmux
簡介
tmux
我想大家之前都聽說過
terminator
,這個多終端管理器,之前我也一直使用的這個,但是使用起來感覺有點醜陋,而且使用起來非常不友善。但是這個
tmux
卻可以使你排抛棄鍵盤滑鼠[1],完全使用鍵盤操作。
tmux
是指通過一個終端登入遠端主機并運作後,在其中可以開啟多個控制台的終端複用軟體。類似GNU Screen,但來自于OpenBSD,采用BSD授權。使用它最直覺的好處就是,通過一個終端登入遠端主機并運作tmux後,在其中可以開啟多個控制台而無需再“浪費”多餘的終端來連接配接這台遠端主機;當然其功能遠不止于此。
Tmux("Terminal Multiplexer"的簡稱)
可以讓我們在單個螢幕的靈活布局下開出很多終端,我們就可以協作地使用它們。舉個例子,在一個面闆中,我們用Vim修改一些配置檔案,在另一個面闆,我們使用irssi聊天,而在其餘的面闆,可以跟蹤一些日志。然後,我們還可以打開新的視窗來更新系統,再開一個新視窗來進行伺服器的ssh連接配接。在這些視窗面闆間浏覽切換和建立它們一樣簡單。它的高度可配置和可定制的,讓其成為你心中的延伸
我們可以借助
Tmux
建構出複雜的開發環境,同時還可以在一旁進行
SSH
遠端連接配接。可以開出很多視窗,将其拆分成很多面闆,接管和分離會話等等
2 tmux的優勢
* 提供了強勁的、易于使用的指令行界面。
* 可橫向和縱向分割視窗。
* 窗格可以自由移動和調整大小,或直接利用四個預設布局之一。
* 支援 UTF-8 編碼及 256 色終端。
* 可在多個緩沖區進行複制和粘貼。
* 可通過互動式菜單來選擇視窗、會話及用戶端。
* 支援跨視窗搜尋。
* 支援自動及手動鎖定視窗。
3 tmux安裝
sudo apt-get install tmux
4 tmux使用詳解
安裝完成後輸入指令tmux即可打開軟體,界面十分簡單,類似一個下方帶有狀态欄的終端控制台;
但根據tmux的定義,在開啟了tmux伺服器後,會首先建立一個會話,而這個會話則會首先建立一個視窗,其中僅包含一個面闆;
也就是說,這裡看到的所謂終端控制台應該稱作tmux的一個面闆,雖然其使用方法與終端控制台完全相同。
tmux使用C/S模型建構,主要包括以下單元子產品:
子產品 | 名稱 | 描述 |
---|---|---|
server | 伺服器 | 輸入tmux指令時就開啟了一個伺服器 |
session | 會話 | 一個伺服器可以包含多個會話 |
window | 視窗 | 一個會話可以包含多個視窗 |
panel | 面闆 | 一個視窗可以包含多個面闆 |
4.1 session會話
使用
Tmux
的最好方式是使用會話的方式,這樣你就可以以你想要的方式,将任務和應用組織到不同的會話中。如果你想改變一個會話,會話裡面的任何工作都無須停止或者殺掉。讓我們來看看這是怎麼工作的。
讓我們開始一個叫做"session"的會話,并且運作top指令
tmux new -s new session
top
4.2 tmux指令
類似各種平鋪式視窗管理器,tmux使用鍵盤操作,常用快捷鍵包括:
我們在終端中輸入
Ctrl+b
,則激活控制台;此時以下按鍵生效,然後輸入一下指令即可進行操作。
4.3 系統操作指令
指令 | 描述 |
---|---|
? | 列出所有快捷鍵;按q傳回 |
d | 脫離目前會話;這樣可以暫時傳回Shell界面,輸入tmux attach能夠重新進入之前的會話 |
D | 選擇要脫離的會話;在同時開啟了多個會話時使用 |
Ctrl+z | 挂起目前會話 |
r | 強制重繪未脫離的會話 |
s | 選擇并切換會話;在同時開啟了多個會話時使用 |
: | 進入指令行模式;此時可以輸入支援的指令,例如kill-server可以關閉伺服器 |
[ | 進入複制模式;此時的操作與vi/emacs相同,按q/Esc退出 |
~ | 列出提示資訊緩存;其中包含了之前tmux傳回的各種提示資訊 |
4.4 視窗操作
指令 | 描述 |
---|---|
c | 建立新視窗 |
& | 關閉目前視窗 |
數字鍵 | 切換至指定視窗 |
p | 切換至上一視窗 |
n | 切換至下一視窗 |
l | 在前後兩個視窗間互相切換 |
w | 通過視窗清單切換視窗 |
, | 重命名目前視窗;這樣便于識别 |
. | 修改目前視窗編号;相當于視窗重新排序 |
f | 在所有視窗中查找指定文本 |
4.5 面闆操作
指令 | 描述 |
---|---|
" | 将目前面闆平分為上下兩塊 |
% | 将目前面闆平分為左右兩塊 |
x | 關閉目前面闆 |
! | 将目前面闆置于新視窗;即建立一個視窗,其中僅包含目前面闆 |
Ctrl+方向鍵 | 以1個單元格為機關移動邊緣以調整目前面闆大小 |
Alt+方向鍵 | 以5個單元格為機關移動邊緣以調整目前面闆大小 |
Space | 在預置的面闆布局中循環切換;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled |
q | 顯示面闆編号 |
o | 在目前視窗中選擇下一面闆 |
方向鍵 | 移動光标以選擇面闆 |
{ | 向前置換目前面闆 |
} | 向後置換目前面闆 |
Alt+o | 逆時針旋轉目前視窗的面闆 |
Ctrl+o | 順時針旋轉目前視窗的面闆 |
6 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
下面是我的配置檔案資訊
# 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 的視窗
此外,像Tmuxinator 或者 Tmuxifier這樣的工具,可以簡化Tmux會話,視窗和面闆的建立及加載,你可以很容易就配置Tmux。如果你沒有使用過這些,嘗試一下吧!
網上發現的比較好的一些配置資訊
https://github.com/xuxiaodong/tmuxen
https://linuxtoy.org/archives/scripting-tmux.html
自動化啟動tmux的腳本