Tmux: 打造精致与实用并存的终端
由于最近需要經常 ssh 到遠程環境,遂趁此折騰了一番 tmux。畢竟 工欲善其事,必先利其器
以下是我的配置文件地址,并在不斷摸索與更新中。特別喜歡 solarized 主題,于是參考它配了狀態欄的主題。在后邊我會列出一些平時使用的技巧,并且歡迎補充~ 如果能夠幫到你的話,希望點一個贊或者star
- github.com/shfshanyue/…
先放張截圖,先睹為快,這是在 Mac 下的截圖。
本文鏈接: shanyue.tech/post/tmux-s…
簡介
tmux is a terminal multiplexer
tmux 是一個終端復用器,你可以在一個屏幕上管理多個終端!
就我理解,tmux 有以下三大好處
基礎
啟動
新建一個 tmux session,不過建議您使用以下 Tips 1 來新建
$ tmux # 新建一個 tmux session,不過建議您使用以下 Tips 1 來新建。 復制代碼術語
- server 包含多個 session
- session 包含多個 window
- window 類似于 iterm2 的 Tab,包含多個 pane,以下中文會翻譯為窗口
- pane 類似于 iterm2 的 Pane,以下中文會翻譯為面板
常見命令
- bind-key (bind)?:綁定快捷鍵,按 prefix 鍵與快捷鍵觸發。
- set-option (set) : 設置選項
- source-file (source) : 生效當前配置文件
- new-window : 新建窗口,默認快捷鍵 prefix c
- split-window : 分屏
自定義狀態欄
喜歡 solarized 主題,但是背景色在終端下不大漂亮,選擇了 tomorrow 中的一個背景色替代。
message-command-style
設置狀態欄信息的樣式,以逗號分隔,可設置前景色 fg,背景色 bg,與文字修飾,如斜體 italics,粗體 bold 等等。如下例
"fg=yellow, bg=#abcdef, underscore" 復制代碼自定義狀態欄
可以自定義狀態欄的內容,如窗口號,窗口名,host,用電量,時間等等。
- #{host} tmux 會提供一些關于自身狀態的變量,比如 session-name,window-name,host 等等。比如以 #{host} 這種形式來代替 host,#{window-name} 代替 window-name。
- #(uptime) 除了在狀態欄中 tmux 相關信息,有時還需要取到系統相關信息,如開機時間,當前用戶。這些系統命令可以表示為 #(uptime)。
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 了。不過鼠標模式我不大喜歡,所以還是禁了。
何況,開啟鼠標支持后,誰都可以操作我的終端了,一點逼格也沒有了
保持當前路徑
新開 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。輸入窗口內容的關鍵字,便可以快速定位到窗口,不過有一個小小的缺點,便是不能定位到面板!
Last but not least
man tmux ! **不看文檔不足以熟練,不看源碼不足以精通。**所以,平常需要多看幾眼文檔,多瞧幾個命令。
擴展
- practical-tmux
- gpakosz/.tmux (stars 1569)
- tmux-resurrect 保護和恢復工作狀態
轉載于:https://juejin.im/post/5d33d45b5188254d3c5e59f0
總結
以上是生活随笔為你收集整理的Tmux: 打造精致与实用并存的终端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vs Code 配置C/C++ 开发环
- 下一篇: 凭借K2 SmartObject框架,在