tmux的超絕便利

SolomonXie發表於2018-06-02

伺服器的任務不間斷執行,就是利用了tmux的特性。就是說,一般ssh是斷開就會停止所有之前連線ssh期間執行的所有processes,而tmux的核心業務不在於把螢幕分成幾塊好看,而是它能儲存session!而且還能多端實時直播session!

瞭解tmux的安裝和使用已經理解,這個短視訊足矣!如果想試試tmux的session共享,讓別的機器或別人像直播一樣看你在命令列裡打字、操作,也用tmux一句話即可,參考這個視訊

我萬萬沒想到,將vim打造成IDE、將指令碼不間斷執行、讓任務執行狀態多處可觀看的tmux,是這麼簡單。
一句sudo apt-get install tmux就安裝好,一句tmux就開啟,一句tmux new -s <session-name>就可以建立和儲存session。超絕!

常用操作快捷鍵參考。

Tmux常用命令參考

#啟動新會話:
tmux [new -s 會話名 -n 視窗名]

#恢復會話:
tmux at [-t 會話名]

#列出所有會話:
tmux ls

#關閉會話:
tmux kill-session -t 會話名

#關閉所有會話:
tmux ls | grep : | cut -d. -f1 | awk `{print substr($1, 0, length($1)-1)}` | xargs kill

Tmux 常用內部命令

所謂內部命令,就是進入Tmux後的指令。在按下字首鍵後的命令,一般字首鍵為Ctrl+b.

#會話
:new<回車>  啟動新會話
s           列出所有會話
$           重新命名當前會話

#視窗
c  建立新視窗
w  列出所有視窗
n  後一個視窗
p  前一個視窗
f  查詢視窗
,  重新命名當前視窗
&  關閉當前視窗

#窗格(分割視窗)
%  垂直分割
"  水平分割
o  交換窗格
x  關閉窗格
⍽  左邊這個符號代表空格鍵 - 切換佈局
q 顯示每個窗格是第幾個,當數字出現的時候按數字幾就選中第幾個窗格
{ 與上一個窗格交換位置
} 與下一個窗格交換位置
z 切換窗格最大化/最小化

#調整視窗排序
swap-window -s 3 -t 1  交換 3 號和 1 號視窗
swap-window -t 1       交換當前和 1 號視窗
move-window -t 1       移動當前視窗到 1 號

#同步窗格 
#這麼做可以切換到想要的視窗,輸入 Tmux 字首和一個冒號撥出命令提示行,然後輸入:
:setw synchronize-panes

#調整窗格尺寸
#如果你不喜歡預設佈局,可以重調窗格的尺寸。雖然這很容易實現,但一般不需要這麼幹。這幾個命令用來調整窗格:
PREFIX : resize-pane -D          當前窗格向下擴大 1 格
PREFIX : resize-pane -U          當前窗格向上擴大 1 格
PREFIX : resize-pane -L          當前窗格向左擴大 1 格
PREFIX : resize-pane -R          當前窗格向右擴大 1 格
PREFIX : resize-pane -D 20       當前窗格向下擴大 20 格
PREFIX : resize-pane -t 2 -L 20  編號為 2 的窗格向左擴大 20 格

Tmux無法持久儲存session問題

它雖然好用,但是缺點是關機的話session就全都消失了。要解決這點,需要安裝單獨的外掛。
這個時候你就需要Tmux-Resurrect外掛來了,地址在這
外掛說明裡很清楚的寫了,tmux一旦關機,就會失去一切的設定。所以還必須用外掛來解決。
安裝方法:

Tmux安裝外掛管理器TPM

和vim一樣的思路,需要先安裝tmux專屬的外掛管理器,一般都是用這個:tmux plugin manager,即tpm。注意:文件裡面都會提到prefix + ...,其中prefix指的是tmux的命令字首,預設是ctrl+b

按照官網的做法,很簡單就安裝上了,輸入下面命令:

# 把管理器檔案安裝到`~/.tmux/plugins/tpm`之下 此前這些目錄是不存在的
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

# 新建配置檔案
touch ~/.tmux.conf
vim ~/.tmux.conf

# 將下面內容複製到`~/.tmux.conf`
# List of plugins
set -g @plugin `tmux-plugins/tpm`
set -g @plugin `tmux-plugins/tmux-sensible`
# Other examples:
# set -g @plugin `github_username/plugin_name`
# set -g @plugin `git@github.com/user/plugin`
# set -g @plugin `git@bitbucket.com/user/plugin`
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run `~/.tmux/plugins/tpm/tpm` 

# 在tmux執行的時候,找到任意視窗輸入下面這個完成安裝管理器:
tmux source ~/.tmux.conf

tmux安裝外掛

在tpm管理器基礎上,我們直接到~/.tmux.conf檔案裡的List of plugins部分,寫入外掛名稱,然後按Ctrl+b,再按Ctrl+I,這裡面是大寫的i。然後程式就會自動下載安裝好外掛了。

安裝tmux-resurrect外掛

由於tmux不能持久儲存session的特性,我們需要安裝這個外掛來將session的設定完全儲存到本地,然後重啟後也能夠快速恢復視窗等設定的內容。
首先在~/.tmux.conf檔案的List of plugins部分加入這句話:

set -g @plugin `tmux-plugins/tmux-resurrect`

儲存好後,在tmux的任意視窗按ctrl+b及大寫的I,即可完成下載安裝。

用法

  • prefix + Ctrl-s – 儲存session
  • prefix + Ctrl-r – 恢復session

Tmux中的vim等軟體顏色丟失

這是因為tmux預設TERM沒有用256color,那麼每次執行tmux時指定color即可,TERM=screen-256color-bce tmux,或者更簡單一點,在~/.bash.profile或者~/.zshrc中設定別名:

alias tmux="TERM=screen-256color-bce tmux"

然後在~/.tmux.conf檔案中加入這句話:

set -g default-terminal "xterm-256color"

Tmux中滑鼠滾屏不能用

tmux中滑鼠滾屏預設是關閉的,且不是很容易像開關一樣開啟支援。
看過了一些stackoverflow嘗試了一些解決方案,發現沒有一個管用。如果比這個還麻煩,暫時我就覺得沒有必要再折騰了,直接用原生的螢幕滾動瀏覽快捷鍵即可:
Prefix + [,然後直接用上下箭頭,或者PnUp和PnDown即可

Tmux的配置檔案

配置檔案預設位於~/.tmux.conf.
日常使用中,字首鍵Ctrl+b和切換視窗鍵Ctrl+o等等,實在太麻煩了。所以改快捷鍵有時候是很必要的。
參考這篇文件。

我的配置如下:

# 基礎設定
#set -g default-terminal "screen-256color"
set -g default-terminal "xterm-256color"     # recover colorful terminal
set -g display-time 3000
set -g escape-time 0
set -g history-limit 65535
set -g base-index 1
set -g pane-base-index 1


# 字首繫結 (Ctrl+a)
#set -g prefix ^a
#unbind ^b
#bind a send-prefix

# 啟用滑鼠(Tmux v2.1)
set -g mouse on

# 選中視窗
bind-key k select-pane -U
bind-key j select-pane -D
bind-key h select-pane -L
bind-key l select-pane -R

# copy-mode 將快捷鍵設定為 vi 模式
setw -g mode-keys vi

#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
# Tmux Plugin Manager(Tmux v2.1)
#== TMUX PLUGIN MANAGER ==#
# Tmux Resurrect
set -g @plugin `tmux-plugins/tmux-resurrect`

# List of plugins
set -g @plugin `tmux-plugins/tpm`
set -g @plugin `tmux-plugins/tmux-sensible`

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run `~/.tmux/plugins/tpm/tpm`
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>