用pietty開發時,經常需要連到其他servers
懶得再開一個pietty,直接用ssh連線做完後,又得要exit掉,回到原本的環境
如果忘了做件事,又要再重連一次,指令密碼一直下,路徑也要一直切
環境一直切換覺得挺煩的,但再開一個pietty來做,切換視窗也是切到暈,常切到不知自己在哪...
今天同事也遇到以上問題,問我知不知道怎麼切換連線
說他有看過,但他不會...
這才一語驚醒夢中人... 對呀!!! 這東西應該有人有做出什麼神奇的工具
我怎麼都沒想過,即然同事都說有看過了,就jfgi了一下...
結果出現screen及tmux這好東西... 試用了一下,真是太感動了
個人覺得最方便的功能如下:
- 同一個pietty連線,可以使用多個windows
有點像是用本機登入linux,用F1,F2... 就可以切換多重視窗
而且可以自定內部視窗的名字,這樣開再多也不怕
- 視窗保留
離開tmux後(tmux detach),再下tmux attach能夠保留上一次所有開啟的視窗連線狀態(session)。例如用vim開發常會開好幾個分頁,離開時要全關,下次再一一打開,有時只是離開一下座位,開著編輯畫面總覺得怪怪的,利用視窗保留就能不離開vim或當時的環境,等要用時再取回,這真是太酷了...
而且能夠開多個session,保留不同的開發環境
- 保留開發環境(多重seesions)
個人是習慣每個專案即建相關的session,而該session下就是該專案相關的開發環境
如此一來,切換專案時,所有的環境(該seesion下的windows)都保留著,在切換專案時,也不用花太多時間回想環境
Install tmux
- install tmux
如果找不到套件,先加入epel的repo
Install EPEL Repository On 32-bit CentOS Linux 5.5:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Install EPEL Repository On 64-bit CentOS Linux 5.5:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
Reference: Install EPEL Repo CentOS RHEL
- 啟動tmux
畫面如下圖所示
重點在1.session 及2.window
把每一個session看成獨立一個連線
而每個session都可如上圖有多個windows
因此seesion 1 為project A,再對project A開啟多個windows
而session 2 即為project B, 再對project B開啟多個windows
- tmux指令(啟動tmux環境)
- 取回視窗
$ tmux attach
$ tmux attach -t session-id //指定特定seesion
- 列出所有sessions
- 更改session名
$ tmux rename-session -t session1 session2 //把session1改成session2
或者直接下function key + $
- tmux視窗指令 ()
- Ctrl-b c Create new window
- Ctrl-b d Detach current client
- Ctrl-b l Move to previously selected window
- Ctrl-b n Move to the next window
- Ctrl-b p Move to the previous window
- Ctrl-b & Kill the current window
- Ctrl-b $ Rename the current session
- Ctrl-b , Rename the current window
- Ctrl-b % Split the current window into two panes
- Ctrl-b ? List all keybindings
- Ctrl-b s 切換session,如下圖,列出所有sessions,再選擇要切換的
- 分割 / 切割視窗 (切出來的叫pane)
- Ctrl-b q Show pane numbers
- Ctrl-b alt按著,再按上下左右, 可以調整視窗大小
- Ctrl-b % 直切
- Ctrl-b :"split-window" 橫切
- Ctrl-b Ctrl-o 調換 切割視窗 的 位置
- Ctrl-b o Switch to the next pane
- Ctrl-b 上下左右 跳到上下左右的分割視窗
- Ctrl-b ! 將目前的pane抽成window
- Ctrl-b x 移除目前的pane
- 自定key組合
切割視窗還是先設好key,不然還真不好用,以下是個人參考網路上的設定
把預設的Ctrl-b改為Ctrl-a,手比較不會抽筋...
# vi ~/.tmux.conf
# General configuration.
# $ tmux show-options -g
set -g base-index 1
set -g display-time 5000
set -g repeat-time 1000
set -g status-keys vi
set -g status-utf8 on
set -g status-bg black
set -g status-fg white
set -g status-justify left
set -g status-interval 1
set -g status-left-length 15
set -g status-right-length 55
set -g status-left "#[fg=white,bright] #[fg=yellow,bright]#S #[default] |" # session-name
set -g status-right "#[fg=red,bright][ #[fg=cyan]#(git branch --no-color | sed -e '/^[^*]/d' -e 's/* //') #[fg=red]]#[default] #[fg=yellow,bright] %Y-%m-%d #[fg=green]%H:%M:%S #[default]#[fg=magenta,bright]#[default]"
# window setting
setw -g utf8 on
setw -g window-status-format " [#I] #W "
setw -g window-status-current-format " [#I] #W "
setw -g window-status-current-fg black
setw -g window-status-current-bg green
setw -g window-status-current-attr default
set-option -g allow-rename off #禁止rename,在tmux v1.8 在換路徑時,會一直rename window
# using function keyCtrl+A
unbind C-b
set -g prefix ^A
bind a send-prefix
# split window
unbind %
unbind '"'
bind v split-window -h
bind | split-window -h
bind h split-window -v
bind - split-window -v
設好後,重啟config
tmux source-file ~/.tmux.conf
git branch資訊不曉得為何,偶爾會有出現,後來發現要在git folder裡開tmux才會有,不曉得為什麼