tmux的使用方法和個性化配置
#介紹
tmux是一個優秀的終端複用軟體,即使非正常掉線,也能保證當前的任務執行,這一點對於 遠端SSH訪問特別有用,網路不好的情況下仍然能保證工作現場不丟失!此外,tmux完全使用鍵盤 控制視窗,實現視窗的切換功能。
簡單地說,tmux對於我主要有兩個功能(這應該也是tmux的主要功能):
- split視窗。可以在一個terminal下開啟多個終端,也可以對當前螢幕進行各種split,即可以 同時開啟多個顯示範圍更小的終端。
- 在使用SSH的環境下,避免網路不穩定,導致工作現場的丟失。想象以下場景, 你在執行一條命令的過程中,由於網路不穩定,SSH連線斷開了。這個時候,你就不知道之前 的那條命令是否執行成功。如果此時你開啟了很多檔案,進入了較深層次的目錄,由於網路 不穩定,SSH連線斷開。重新連線以後,你又不得不重新開啟那些檔案,進入那個深層次的 目錄。如果使用了tmux,重新連線以後,就可以直接回到原來的工作環境,不但提高了工作 效率,還降低了風險,增加了安全性。
#安裝
sudo apt-get install tmux
安裝完成後輸入命令tmux即可開啟軟體,介面十分簡單,類似一個下方帶有狀態列的終端控制檯; 不出意外,這時候你會跟我第一次一樣,覺得tmux沒什麼牛逼的。
#會話,視窗,皮膚
根據tmux的定義,在開啟了tmux伺服器後,會首先建立一個會話,而這個會話則會首先建立一個 視窗,其中僅包含一個皮膚;也就是說,這裡看到的所謂終端控制檯應該稱作tmux的一個皮膚, 雖然其使用方法與終端控制檯完全相同。
tmux使用C/S模型構建,主要包括以下單元模組:
- server伺服器。輸入tmux命令時就開啟了一個伺服器。
- session會話。一個伺服器可以包含多個會話
- window視窗。一個會話可以包含多個視窗。
- pane皮膚。一個視窗可以包含多個皮膚。
#初體驗
我們先來看一張效果圖,再來學習tmux的配置和使用我一般都是這麼用,因為我的筆記本 只有13寸:-)
當然,做為一個準IT男,我還有一個很大的螢幕,所以我偶爾也這麼用:
你所看到的只是X個會話中的一個會話,且是該會話下面的Y個視窗中的一個視窗。是的,你在一 個視窗裡就可以擁有這麼多個終端,這就是tmux的主要功能。好了,下面是tmux的常用按鍵,你 先自己玩一下再往下看吧。
#常用按鍵
這裡需要說明一點的是,tmux的任何指令,都包含一個字首,也就是說,你按了字首(一組按鍵, 預設是Ctrl+b)以後,系統才知道你接下來的指令是傳送給tmux的。
- C-b ? 顯示快捷鍵幫助
- C-b C-o 調換視窗位置,類似與vim 裡的C-w
- C-b 空格鍵 採用下一個內建佈局
- C-b ! 把當前視窗變為新視窗
- C-b “ 橫向分隔視窗
- C-b % 縱向分隔視窗
- C-b q 顯示分隔視窗的編號
- C-b o 跳到下一個分隔視窗
- C-b 上下鍵 上一個及下一個分隔視窗
- C-b C-方向鍵 調整分隔視窗大小
- C-b c 建立新視窗
- C-b 0~9 選擇幾號視窗
- C-b c 建立新視窗
- C-b n 選擇下一個視窗
- C-b l 切換到最後使用的視窗
- C-b p 選擇前一個視窗
- C-b w 以選單方式顯示及選擇視窗
- C-b t 顯示時鐘
- C-b ; 切換到最後一個使用的皮膚
- C-b x 關閉皮膚
- C-b & 關閉視窗
- C-b s 以選單方式顯示和選擇會話
- C-b d 退出tumx,並儲存當前會話,這時,tmux仍在後臺執行,可以通過tmux attach進入 到指定的會話
#配置
我們先來看一下幾個配置,這些配置才是我離不開tmux的原因:-)。tmux的配置檔案是 ~/.tmux.conf
,這個檔案可能不存在,你可以自己新建。下面開始配置,首先,有沒有 覺得tmux的字首按起來太不方便了,ctrl與b鍵隔得太遠,很多人把它對映成C+a,也就
是在配置檔案(~/.tmux.conf
)中加入下面這條語句:
#設定字首為Ctrl + a
set -g prefix C-a
與此同時,取消預設的字首按鍵:
#解除Ctrl+b 與字首的對應關係
unbind C-b
配置完以後,重啟tmux起效,或者先按C+b,然後輸入:
,進入命令列模式, 在命令列模式下輸入:
source-file ~/.tmux.conf
你也可以跟我一樣,在配置檔案中加入下面這句話,以後改了只需要按字首+r了。
#將r 設定為載入配置檔案,並顯示"reloaded!"資訊
bind r source-file ~/.tmux.conf \; display "Reloaded!"
關於字首,很多人都喜歡改成Ctrl+a,不過我個人更喜歡Ctrl+x,如果你是vim使用者,你一定懂 的。還有就是皮膚的切換很不方便,需要先按字首,再按方向鍵,還記得vim裡面怎麼切換各個 皮膚的嗎?tmux也可以,因為它支援對映。把字首對映改成Ctrl+x,再加入如下幾條語句, 現在切換視窗就和vim一摸一樣了,頓時覺得親切了很多。
#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R
上面的最後一條語句會更改C-x l的功能,我挺喜歡這個功能的,因為我們很時候都是在兩個窗 口或這兩個皮膚中切換,所以我又加入如下語句
#select last window
bind-key C-l select-window -l
現在我的l鍵可不能隨便按了,Ctrl+x l是切換皮膚,Ctrl+x Ctrl+l切換視窗,Ctrl+l清屏。
複製模式copy-mode
- 字首 [ 進入複製模式
- 按 space 開始複製,移動游標選擇複製區域
- 按 Enter 複製並退出copy-mode。
- 將游標移動到指定位置,按 PREIFX ] 貼上
如果把tmux比作vim的話,那麼我們大部分時間都是處於編輯模式,我們複製的時候可不可以像 vim一樣移動呢?只需要在配置檔案(~/.tmux.conf
)中加入如下行即可。
#copy-mode 將快捷鍵設定為vi 模式
setw -g mode-keys vi
#會話
- C-x s 以選單的方式檢視並選擇會話
- C-x :new-session 新建一個會話
- C-x d 退出並儲存會話
- 終端執行 tmux attach 返回會話
#命名會話
tmux new -s session
tmux new -s session -d #在後臺建立會話
tmux ls #列出會話
tmux attach -t session #進入某個會話
#使當前pane 最大化
從我用vim開始,就相信這世界上有些人比你自己還了解你自己想要什麼,所以喬老爺子才能做 出讓世人尖叫的產品,所以我經常瀏覽高手的.vimrc檔案,我用了tmux不到3天就發現,它怎麼 不能最大化當前pane?就像vim裡的ZommWinPlugin.vim外掛一樣,你按下某鍵,當前視窗就最大 化了,獲得最大可視介面。當目前為止,就還沒有發現我有需求而別人沒有的,同樣,已有前人 找到的解決辦法,方法如下:
# zoom pane <-> window
#http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/tmux-zoom.sh
bind ^z run "tmux-zoom"
##
#滾屏
滾屏要進入copy-mode,即字首+[,然後就可以用上下鍵來滾動螢幕,配置了vi快捷鍵模式,就 可以像操作vi一樣來滾動螢幕,非常的方便。退出直接按‘q’鍵即可。
#其他配置
下面是從別人那裡摘錄過來的配置,反正我是用不著,留著以後參考吧,或許螢幕前的你 有需要呢。
#
# author : Xu Xiaodong <xxdlhy@gmail.com>
# modified : 2012 Jul 22
#
#-- base settings --#
set -g default-terminal "screen-256color"
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
#-- bindkeys --#
# prefix key (Ctrl+a)
set -g prefix ^a
unbind ^b
bind a send-prefix
# split window
unbind '"'
# vertical split (prefix -)
bind - splitw -v
unbind %
bind | splitw -h # horizontal split (prefix |)
# select pane
bind k selectp -U # above (prefix k)
bind j selectp -D # below (prefix j)
bind h selectp -L # left (prefix h)
bind l selectp -R # right (prefix l)
# resize pane
bind -r ^k resizep -U 10 # upward (prefix Ctrl+k)
bind -r ^j resizep -D 10 # downward (prefix Ctrl+j)
bind -r ^h resizep -L 10 # to the left (prefix Ctrl+h)
bind -r ^l resizep -R 10 # to the right (prefix Ctrl+l)
# swap pane
# swap with the previous pane (prefix Ctrl+u)
bind ^u swapp -U
# swap with the next pane (prefix Ctrl+d)
bind ^d swapp -D
# misc
# select the last pane (prefix e)
bind e lastp
# select the last window (prefix Ctrl+e)
bind ^e last
# kill pane (prefix q)
bind q killp
# kill window (prefix Ctrl+q)
bind ^q killw
# copy mode
# enter copy mode (prefix Escape)
bind Escape copy-mode
# paste buffer (prefix Ctrl+p)
bind ^p pasteb
# select (v)
bind -t vi-copy v begin-selection
# copy (y)
bind -t vi-copy y copy-selection
# zoom pane <-> window
#http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/tmux-zoom.sh
bind ^z run "tmux-zoom"
# app
# htop (prefix !)
bind ! splitw htop
# man (prefix m)
bind m command-prompt "splitw 'exec man %%'"
# perl func (prefix @)
bind @ command-prompt "splitw 'exec perldoc -t -f %%'"
# perl var (prefix *)
bind * command-prompt "splitw 'exec perldoc -t -v %%'"
# perl doc (prefix %)
bind % command-prompt "splitw 'exec perldoc -t %%'"
# ruby doc (prefix /)
bind / command-prompt "splitw 'exec ri %%'"
# reload config (prefix r)
bind r source ~/.tmux.conf \; display "Configuration reloaded!"
#-- statusbar --#
set -g status-utf8 on
set -g status-interval 1
set -g status-keys vi
setw -g mode-keys vi
setw -g automatic-rename off
#-- colorscheme --#
#https://github.com/daethorian/conf-tmux/blob/master/colors/zenburn.conf
# modes
setw -g clock-mode-colour colour223
setw -g mode-attr bold
setw -g mode-fg colour223
setw -g mode-bg colour235
# panes
set -g pane-border-bg colour234
set -g pane-border-fg colour234
set -g pane-active-border-bg colour232
set -g pane-active-border-fg colour232
# statusbar
set -g status-justify centre
set -g status-bg colour235
set -g status-fg colour248
set -g status-attr dim
#[default]» #[fg=colour187]#S #[default]• #[fg=colour187]w#I.p#P#[default]"
set -g status-left "
set -g status-left-attr bright
set -g status-left-length 20
#[fg=colour174]#(/home/xiaodong/bin/uptime) #[default]• #[fg=colour174]#(cut -d ' ' -f 1-3 /proc/loadavg)"
set -g status-right "
set -g status-right-attr bright
set -g status-right-length 80
setw -g window-status-current-fg colour223
setw -g window-status-current-bg colour237
setw -g window-status-current-attr bold
setw -g window-status-current-format "#I:#W#F"
#setw -g window-status-alert-attr bold
#setw -g window-status-alert-fg colour255
#setw -g window-status-alert-bg colour160
# messages
set -g message-attr bold
set -g message-fg colour223
set -g message-bg colour235
set -g visual-activity on
#快速啟動tmux
如果覺得每次都要開啟tmux,然後在開啟幾個視窗和皮膚很麻煩,那麼下面這個指令碼你一定會 喜歡。參考這裡
#!/bin/sh
#
# name : tmuxen, tmux environment made easy
# author : Xu Xiaodong xxdlhy@gmail.com
# license : GPL
# created : 2012 Jul 01
# modified : 2012 Jul 02
#
cmd=$(which tmux) # tmux path
session=codefun # session name
if [ -z $cmd ]; then
echo "You need to install tmux."
exit 1
fi
$cmd has -t $session
if [ $? != 0 ]; then
$cmd new -d -n vim -s $session "vim"
$cmd splitw -v -p 20 -t $session "pry"
$cmd neww -n mutt -t $session "mutt"
$cmd neww -n irssi -t $session "irssi"
$cmd neww -n cmus -t $session "cmus"
$cmd neww -n zsh -t $session "zsh"
$cmd splitw -h -p 50 -t $session "zsh"
$cmd selectw -t $session:5
fi
$cmd att -t $session
exit 0
如果還有其他需要,可以去這裡看看,當然了,最全的參考文件,就是man tmux。 happy tmux!
from: http://mingxinglai.com/cn/2012/09/tmux/#top
相關文章
- tmux配置UX
- tmux resurrect 配置UX
- 個性化配置你的SQLServeronLinuxSQLServerLinux
- IDEA外掛和個性化配置推薦Idea
- 我的tmux配置檔案UX
- CentOS 7 個性化配置指南CentOS
- vim安裝及個性化配置
- AIX中YUM庫的配置和使用方法AI
- VisualSVN Server的配置和使用方法 圖文Server
- 個性化定義多個 Git 託管平臺配置Git
- 假日營銷要素:敏捷性、創造性和個性化敏捷
- 如何打造差異化和個性化的夜遊專案
- 高效開發者是如何個性化VS Code外掛與配置的?
- ITSM的個性化需求
- SAP Commerce Cloud Github 專案的個性化配置 customizationCloudGithub
- Vim實戰手冊(1)初級個性化配置你的Vim
- 更好利用 tmux 會話的 4 個技巧UX會話
- MyEclipse的優化與個性化Eclipse優化
- tmuxUX
- Google的個性化搜尋Go
- Google:旅遊品牌應簡單化、個性化和移動化Go
- 企業集團資訊系統規範化和個性化的研究
- Amazon和Netflix的個性化推薦是如何工作的?
- Tmux 速成教程:技巧和調整UX
- git log 個性化Git
- tmux使用UX
- tmux的超絕便利UX
- JavaScript:prototype屬性使用方法JavaScript
- PostgreSQL11自定義帶日期等個性化配置的登入提示符SQL
- 結對程式設計利器:SSH和Tmux程式設計UX
- jQuery Validate全域性配置和例項配置jQuery
- 個性化emacs設定Mac
- Jquery 和 Ajax的 使用方法jQuery
- Spring Boot 專案配置的使用方法Spring Boot
- 個性化的分頁實現 (轉)
- php-fpm的配置和優化PHP優化
- win10個性化設定方法_怎麼使用win10的個性化設定Win10
- eslint-config-alloy配置個性化ESLint規則的最佳參考EsLint