【Linux】tmux安裝(非root)及其使用


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)三部分,會話實質是偽終端的集合,每個窗格表示一個偽終端,多個窗格展現在一個屏幕上,這一屏幕就叫窗口。

image.png

以下是摘自一篇博文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)

tmux使用及個性化配置

但是網上的教程里的配置大部分都太老了,很多識別不了。所以不能照搬來用,最好是自己用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. 問題

分割窗口雖然很方便,但是用鼠標復制一個窗口的文本到另一個窗口時,復制很不方便,因為多個窗口的同一行仍視為一行,所以比較難復制。比如我要復制一個較長的路徑時(雙擊也復制不了),比較困難,而且切換粘貼時也比較麻煩:
image.png

網上有一些解決方法,比如:選擇窗格后,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM