Tmux: 打造精緻與實用並存的終端

因爲最近須要常常 ssh 到遠程環境,遂趁此折騰了一番 tmux。畢竟 工欲善其事,必先利其器webpack

如下是個人配置文件地址,並在不斷摸索與更新中。特別喜歡 solarized 主題,因而參考它配了狀態欄的主題。在後邊我會列出一些平時使用的技巧,而且歡迎補充~ 若是可以幫到你的話,但願點一個贊或者stargit

先放張截圖,先睹爲快,這是在 Mac 下的截圖。github

tmux in mac

本文連接: shanyue.tech/post/tmux-s…web

簡介

tmux is a terminal multiplexervim

tmux 是一個終端複用器,你能夠在一個屏幕上管理多個終端!bash

就我理解,tmux 有如下三大好處session

  1. 分屏 誠然,iterm2 也是能夠作到分屏的,可是 iterm2 有一個缺點即是 iterm for Mac。 並且,iterm2 分屏也須要不斷地 ssh <server>。致使的後果就是有多個用戶鏈接,使用 ps aux | grep sshd | grep -v grep 查看鏈接數。
  2. attach attach 能夠起到保護現場的做用,不至於因 ssh timeout,而喪失了工做環境。
  3. 可配置化

基礎

啓動

新建一個 tmux session,不過建議您使用如下 Tips 1 來新建ssh

$ tmux      # 新建一個 tmux session,不過建議您使用如下 Tips 1 來新建。
複製代碼

術語

  • server 包含多個 session
  • session 包含多個 window
  • window 相似於 iterm2Tab,包含多個 pane,如下中文會翻譯爲窗口
  • pane 相似於 iterm2Pane,如下中文會翻譯爲面板

常見命令

  • bind-key (bind) :綁定快捷鍵,按 prefix 鍵與快捷鍵觸發。
  • set-option (set) : 設置選項
  • source-file (source) : 生效當前配置文件
  • new-window : 新建窗口,默認快捷鍵 prefix c
  • split-window : 分屏

自定義狀態欄

喜歡 solarized 主題,可是背景色在終端下不大漂亮,選擇了 tomorrow 中的一個背景色替代。post

message-command-style

設置狀態欄信息的樣式,以逗號分隔,可設置前景色 fg,背景色 bg,與文字修飾,如斜體 italics,粗體 bold 等等。以下例ui

"fg=yellow, bg=#abcdef, underscore"
複製代碼

自定義狀態欄

能夠自定義狀態欄的內容,如窗口號,窗口名,host,用電量,時間等等。

  • #{host} tmux 會提供一些關於自身狀態的變量,好比 session-namewindow-namehost 等等。好比以 #{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"
複製代碼

Tmux Tricks

保持 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 了。不過鼠標模式我不大喜歡,因此仍是禁了。

況且,開啓鼠標支持後,誰均可以操做個人終端了,一點逼格也沒有了

保持當前路徑

新開 panewindow 時,保持當前路徑。爲之前的命令添加參數 -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&emsp;&emsp;    &emsp;# 進入選擇 buffer 界面,更加靈活
複製代碼

另外,也能夠開啓鼠標支持,用鼠標來選擇文字。

查找關鍵字

既然進入 copy-mode,熟悉 vi 的朋友必定知道查找是 /?

快速定位窗口

假設你新建了多個窗口,須要快速定位到某一個窗口,而你雖知道那個窗口中的內容,卻忘了窗口號,這樣如何解決呢?

有一個很好的解決方案的命令即是 find-window,更好用的即是默認的快捷鍵 prefix f。輸入窗口內容的關鍵字,即可以快速定位到窗口,不過有一個小小的缺點,即是不能定位到面板!

Last but not least

man tmux ! **不看文檔不足以熟練,不看源碼不足以精通。**因此,日常須要多看幾眼文檔,多瞧幾個命令。

擴展

相關文章
相關標籤/搜索