因爲最近須要常常 ssh
到遠程環境,遂趁此折騰了一番 tmux
。畢竟 工欲善其事,必先利其器webpack
如下是個人配置文件地址,並在不斷摸索與更新中。特別喜歡 solarized
主題,因而參考它配了狀態欄的主題。在後邊我會列出一些平時使用的技巧,而且歡迎補充~ 若是可以幫到你的話,但願點一個贊或者stargit
先放張截圖,先睹爲快,這是在 Mac
下的截圖。github
本文連接: shanyue.tech/post/tmux-s…web
tmux is a terminal multiplexervim
tmux
是一個終端複用器,你能夠在一個屏幕上管理多個終端!bash
就我理解,tmux
有如下三大好處session
iterm2
也是能夠作到分屏的,可是 iterm2
有一個缺點即是 iterm for Mac
。 並且,iterm2
分屏也須要不斷地 ssh <server>
。致使的後果就是有多個用戶鏈接,使用 ps aux | grep sshd | grep -v grep
查看鏈接數。attach
能夠起到保護現場的做用,不至於因 ssh timeout
,而喪失了工做環境。新建一個 tmux session,不過建議您使用如下 Tips 1 來新建ssh
$ tmux # 新建一個 tmux session,不過建議您使用如下 Tips 1 來新建。
複製代碼
session
window
iterm2
的 Tab
,包含多個 pane
,如下中文會翻譯爲窗口iterm2
的 Pane
,如下中文會翻譯爲面板prefix
鍵與快捷鍵觸發。prefix c
喜歡 solarized
主題,可是背景色在終端下不大漂亮,選擇了 tomorrow
中的一個背景色替代。post
設置狀態欄信息的樣式,以逗號分隔,可設置前景色 fg
,背景色 bg
,與文字修飾,如斜體 italics
,粗體 bold
等等。以下例ui
"fg=yellow, bg=#abcdef, underscore"
複製代碼
能夠自定義狀態欄的內容,如窗口號,窗口名,host,用電量,時間等等。
#{host}
tmux
會提供一些關於自身狀態的變量,好比 session-name
,window-name
,host
等等。好比以 #{host}
這種形式來代替 host
,#{window-name}
代替 window-name
。#(uptime)
除了在狀態欄中 tmux
相關信息,有時還須要取到系統相關信息,如開機時間,當前用戶。這些系統命令能夠表示爲 #(uptime)
。set -g message-style "bg=#00346e, fg=#ffffd7" # tomorrow night blue, base3
set -g status-style "bg=#00346e, fg=#ffffd7" # tomorrow night blue, base3
set -g status-left "#[bg=#0087ff] ❐ #S " # blue
set -g status-left-length 400
set -g status-right "#{?client_prefix, ~ , } #[bg=#0087ff] #h #[bg=red] %Y-%m-%d %H:%M "
set -g status-right-length 600
set -wg window-status-format " #I #W "
set -wg window-status-current-format " #I #W "
set -wg window-status-separator ""
set -wg window-status-current-style "bg=red" # red
set -wg window-status-last-style "fg=red"
複製代碼
ssh
鏈接每次新建 session
的時候帶上名字,方便下次 attach
。稍微提一個命令 detach
,默認快捷鍵 prefix d
,會先 detach
掉當前 session
。
$ tmux new -s shanyue
$ tmux detach
$ tmux attach -t shanyue
複製代碼
移動面板命令爲 select-pane
,可配置爲 vim
式的移動命令。
bind -r h select-pane -L
bind -r l select-pane -R
bind -r j select-pane -D
bind -r k select-pane -U
複製代碼
其中,參數 -r
表明可重複按鍵,好比 prefix r r
表示 prefix r, prefix r
。其中按鍵時間須要經過 repeat-time
來設置,通常爲500ms。
另外,也能夠開啓鼠標支持,經過鼠標快速移動面板。
prefix key
我習慣 Crtl-s
來做爲前綴鍵,send-prefix
爲向終端發送前綴鍵的命令。
set -g prefix2 C-s
bind C-s send-prefix -2
複製代碼
rename-window
爲重命名窗口名的命令,默認快捷鍵 prefix ,
。
可是有一個小問題,每當重命名窗口名後,敲幾個空格又會自動重命名,本身的辛勤工做又被破壞了...
須要配置如下兩個配置把它倆給關了,終於能夠重命名了
set -wg allow-rename off
set -wg automatic-rename off
複製代碼
把打開和重啓配置文件設爲快捷鍵能夠快速提升配置效率。設置 prefix r
重啓並更新配置,便於調試配置文件。prefix e
打開配置文件。
source ~/.tmux.conf
使配置文件生效,即重啓配置。 new-window -n <window-name> command
新建窗口,並設置窗口名,-n
表明新建的窗口名
bind r source ~/.tmux.conf\; display "tmux config sourced"
bind e neww -n tmux-config "\${EDITOR:-vim} ~/.tmux.conf 複製代碼
$ tmux set -g mouse on
鼠標支持默認是關閉的,開啓鼠標後,支持複製,翻屏,切換面板,切換窗口,resize。
鼠標支持的功能很強大,至此已經成功打造了一個 iterm2
了。不過鼠標模式我不大喜歡,因此仍是禁了。
況且,開啓鼠標支持後,誰均可以操做個人終端了,一點逼格也沒有了
新開 pane
和 window
時,保持當前路徑。爲之前的命令添加參數 -c
,代表新建窗口或者面板的路徑。
新開面板的命令爲 split-window
bind c new-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
複製代碼
命令爲 tmux resize-pane -Z
,默認快捷鍵爲 prefix z
。須要查看更加詳細的信息時能夠按 prefix z
進入全屏,完畢以後,再按一次恢復。至關酷的一個功能。
第一次使用 tmux
時, 使用webpack
,輸出信息不少,而有用的錯誤信息被覆蓋。此時,往上翻屏就很重要了。此時要說下 tmux window
下的兩種模式,
default-mode
就是剛進入 tmux
默認的模式。
copy-mode:
按 prefix [
鍵進入此模式,相似於 vi(emacs)
的 normal mode
,支持複製,粘貼,查找,以及翻頁。具體是 vi
仍是 emacs
能夠根據如下命令探知,代表查看全局窗口設置 mode-keys
,默認會是 vi
,若是不是,那就請設置爲 vi
吧~
$ tmux show-window-options -g mode-keys
複製代碼
與 vi
命令相同,如上下翻頁(半屏)可以使用 C-d
以及 C-u
,固然你也可使用 hjkl
。
另外,也能夠開啓鼠標支持,使用滾輪來翻屏。
上邊說到 copy-mode
,接下來是複製與粘貼。進入 copy-mode
後,v
開始選中,y
來進行復制並會退出 copy-mode
。使用 prefix ]
來進行粘貼。
v & y
爲自定義配置,配置以下
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
複製代碼
複製操做會把內容存進 buffer
裏,熟悉如下幾個命令可以更熟練地操做 buffer
$ tmux list-buffers # 列出全部
$ tmux show-buffer -b [name] # 顯示最近 buffer,也可指定 buffer name
$ tmux choose-buffer    # 進入選擇 buffer 界面,更加靈活
複製代碼
另外,也能夠開啓鼠標支持,用鼠標來選擇文字。
既然進入 copy-mode
,熟悉 vi
的朋友必定知道查找是 /
與 ?
。
假設你新建了多個窗口,須要快速定位到某一個窗口,而你雖知道那個窗口中的內容,卻忘了窗口號,這樣如何解決呢?
有一個很好的解決方案的命令即是 find-window
,更好用的即是默認的快捷鍵 prefix f
。輸入窗口內容的關鍵字,即可以快速定位到窗口,不過有一個小小的缺點,即是不能定位到面板!
man tmux ! **不看文檔不足以熟練,不看源碼不足以精通。**因此,日常須要多看幾眼文檔,多瞧幾個命令。