tmux(terminal multiplexer)是Linux上的終端復用神器。
1. 安裝
(1)下載
下載及其依賴軟件。
wget -c https://github.com/tmux/tmux/releases/download/3.0a/tmux-3.0a.tar.gz
wget -c https://github.com/libevent/libevent/releases/download/release-2.1.11-stable/libevent-2.1.11-stable.tar.gz
wget -c https://ftp.gnu.org/gnu/ncurses/ncurses-6.2.tar.gz
(2)安裝
先安裝依賴,再安裝tmux。
#libevent
./configure --prefix=/my/path/tmux_depend --disable-shared
make && make install
#ncurses
./configure --prefix=/my/path/tmux_depend
make && make install
#tmux
./configure CFLAGS="-I/my/path/tmux_depend/include -I/my/path/tmux_depend/include/ncurses" LDFLAGS="-L/my/path/tmux_depend/lib -L/my/path/tmux_depend/include/ncurses -L/my/path/tmux_depend/include"
#CPPFLAGS="-I/my/path/tmux_depend//include -I/my/path/tmux_depend//include/ncurses" LDFLAGS="-static -L/my/path/tmux_depend//include -L/my/path/tmux_depend//include/ncurses -L/my/path/tmux_depend//lib"
make
cp tmux /my/path/tmux_depend/bin
(3)設置環境
設置環境變量。
#bashrc
export PATH=/my/path/tmux_depend/bin:$PATH
source ~/.bashrc
2. 常用命令使用
tmux的結構包括會話(session)、窗口(window)、窗格(pane)三部分,會話實質是偽終端的集合,每個窗格表示一個偽終端,多個窗格展現在一個屏幕上,這一屏幕就叫窗口。
以下是摘自一篇博文tmux基本操作,寫得很好,但如果沒有一點點基礎,會忽略很多地方。避免走坑,重點解釋下。
tmux基本的操作無非就是對會話、窗口、窗格進行管理,包括創建、關閉、重命名、連接、分離、選擇等等。
一般使用命令和快捷鍵進行操作,可在系統shell終端和tmux命令模式(類似vim的命令模式,窗口下有文字)下使用命令,或者在tmux終端使用快捷鍵。
tmux默認的快捷鍵前綴是Ctrl+b(下文用prefix指代),按下前綴組合鍵后松開(注意松開組合鍵后再按!),再按下命令鍵進行快捷操作,比如分離會話(是prefix d而不是prefix+d,因為d鍵不能與Ctrl+b同時按下!)。所以下面prefix等於ctrl+b/a。
快捷鍵可以自定義,比如將前綴改為Ctrl+a順手一些(如果按ctrl b鍵無效,檢查下~/.tmux.conf配置文件中是否替換或者屏蔽掉了,可試下ctrl a)。如果需要保留shell命令的Ctrl+a快捷鍵(即跳轉到行首),按如下所示修改~/.tmux.conf文件:
1 set-option -g prefix C-a
2 unbind-key C-b
3 bind-key C-a send-prefix
4 bind-key R source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded."
現在已將shell的Ctrl+a用prefix Ctrl+a取代,即需要按兩次Ctrl+a生效(跳到行首)。
第4行的作用是使用prefix r重新加載配置文件,並輸出提示。否則需要關閉會話后配置文件才能生效,也可手動加載配置文件,在tmux終端輸入"prefix :"進入命令模式(注意有冒號),用source-file命令加載配置文件。
注意,將多個命令寫在一起作為命令序列時,命令之間要用空格和分號分隔。
(1) 會話命令
- tmux new 創建默認名稱的會話
- tmux new -s mysession 創建名為mysession的會話
- tmux ls 顯示會話列表
- tmux a 連接上一個會話
- tmux a -t mysession 連接指定會話
- tmux rename -t s1 s2 重命名會話s1為s2
- tmux kill-session 關閉上次打開的會話
- tmux kill-session -t s1 關閉會話s1
- tmux kill-session -a -t s1 關閉除s1外的所有會話
- tmux kill-server 關閉所有會話
- tmux list-key 列出所有綁定的鍵,等同於prefix ?
- tmux list-command 列出所有命令
常用快捷鍵:prefix后按
- s 列出會話,可進行切換
- $ 重命名會話
- d 分離當前會話
- D 分離指定會話
(2)窗口命令
常用快捷鍵:prefix后按
- c 創建一個新窗口
- , 重命名當前窗口
- w 列出所有窗口,可進行切換
- n 進入下一個窗口
- p 進入上一個窗口
- l 進入之前操作的窗口
- 0~9 選擇編號0~9對應的窗口
- . 修改當前窗口索引編號
- ' 切換至指定編號(可大於9)的窗口
- f 根據顯示的內容搜索窗格
- & 關閉當前窗口
(3)窗格命令
常用快捷鍵:prefix后按
- % 水平方向創建窗格
- " 垂直方向創建窗格
- Up|Down|Left|Right 根據箭頭方向切換窗格
- q 顯示窗格編號
- o 順時針切換窗格
- } 與下一個窗格交換位置
- { 與上一個窗格交換位置
- x 關閉當前窗格
- space(空格鍵) 重新排列當前窗口下的所有窗格
- ! 將當前窗格置於新窗口
- Ctrl+o 逆時針旋轉當前窗口的窗格
- t 在當前窗格顯示時間
- z 放大當前窗格(再次按下將還原)
- i 顯示當前窗格信息
啟動與關閉服務器
tmux # 啟動
tmux kill-server # 關閉
進入和退出會話
tmux attach
prefix d # 或者 prefix C-z
3. 快捷鍵配置
關於~/.tmux.conf文件的配置,有一個教程介紹可以參考:
[ Tmux常用快捷鍵以及我會常到的一些問題匯總
](https://www.cnblogs.com/piperck/p/4992159.html)
或者:
[tmux的使用方法和個性化配置
](https://www.cnblogs.com/chjbbs/p/5689011.html)
但是網上的教程里的配置大部分都太老了,很多識別不了。所以不能照搬來用,最好是自己用prefix ?
查看。比如用鼠標來控制不同窗口和窗格大小(拖動),在2.0版本及其以下通過如下設置來控制(網上的絕大多數教程,沒用):
setw -g mouse-resize-pane on #(或者set)
setw -g mouse-select-pane on
setw -g mouse-select-window on
setw -g mode-mouse on
Tmux2.0 版本以上使用set -g mouse on
即可。更多設置鼠標來回滾動窗口參考:
# Enable mouse mode (tmux 2.1 and above)
set -g mouse on
#Enable oh my zsh in tmux
set -g default-command /bin/zsh
# Mouse based copy
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
4. 問題
分割窗口雖然很方便,但是用鼠標復制一個窗口的文本到另一個窗口時,復制很不方便,因為多個窗口的同一行仍視為一行,所以比較難復制。比如我要復制一個較長的路徑時(雙擊也復制不了),比較困難,而且切換粘貼時也比較麻煩:
網上有一些解決方法,比如:選擇窗格后,prefix z,復制,prefix z,切換窗格,粘貼。確實時比較麻煩。后續看看快捷鍵能不能解決掉,不然這個功能缺陷會直接讓我考慮要不要用它了。
通過配置鼠標解決了不同窗口單行復制問題,但顯示器范圍顯示的單行還是視為一行(超出范圍視為另一行,仍復制不了)。鼠標選擇復制的問題很難解決,但這個需求太重要了,我經常要復制粘貼長串的路徑,這也是為何我要用多個終端的原因,如果這一點不能很好地解決,我寧願不用了!
所以,目前我用的配置是:如果想要和正常終端一樣使用,即鼠標復制(雙左擊)粘貼(右擊)操作,但也只能屏幕單行復制粘貼,將配置設為2.0版本以下模式;如果想要用鼠標自由拖動窗格大小、滾動窗格、鼠標隨意選擇窗格等操作,就設為2.0版本以上模式,即set -g mouse on
,但不能復制選擇和粘貼。
最終方案:
要想一次復制長長的路徑(鼠標),不再糾結用切割窗口的方法,多新建一個window,然后prefix n/p
來回切換復制粘貼。所以,如果需要在不同路徑來回配合操作,可用切換window的方法;如果在同一路徑,則切割window(如在一個pane編寫代碼,一個pane調試,或者top查看資源)。當然了,也可新建多個session,然后在不同session之間切換(prefix s
)來復制,但是會多一步,即切換時要選擇session,或者用prefix w
查看所有的session和window,再選擇切換。
Ref:
安裝參考:https://www.jianshu.com/p/f7f24b4b2625
使用參考:https://www.cnblogs.com/liuguanglin/p/9290345.html