Tmux: 打造精致与实用并存的终端
由于最近需要經(jīng)常 ssh 到遠(yuǎn)程環(huán)境,遂趁此折騰了一番 tmux。畢竟 工欲善其事,必先利其器
以下是我的配置文件地址,并在不斷摸索與更新中。特別喜歡 solarized 主題,于是參考它配了狀態(tài)欄的主題。在后邊我會(huì)列出一些平時(shí)使用的技巧,并且歡迎補(bǔ)充~ 如果能夠幫到你的話,希望點(diǎn)一個(gè)贊或者star
- github.com/shfshanyue/…
先放張截圖,先睹為快,這是在 Mac 下的截圖。
本文鏈接: shanyue.tech/post/tmux-s…
簡(jiǎn)介
tmux is a terminal multiplexer
tmux 是一個(gè)終端復(fù)用器,你可以在一個(gè)屏幕上管理多個(gè)終端!
就我理解,tmux 有以下三大好處
基礎(chǔ)
啟動(dòng)
新建一個(gè) tmux session,不過建議您使用以下 Tips 1 來新建
$ tmux # 新建一個(gè) tmux session,不過建議您使用以下 Tips 1 來新建。 復(fù)制代碼術(shù)語
- server 包含多個(gè) session
- session 包含多個(gè) window
- window 類似于 iterm2 的 Tab,包含多個(gè) pane,以下中文會(huì)翻譯為窗口
- pane 類似于 iterm2 的 Pane,以下中文會(huì)翻譯為面板
常見命令
- bind-key (bind)?:綁定快捷鍵,按 prefix 鍵與快捷鍵觸發(fā)。
- set-option (set) : 設(shè)置選項(xiàng)
- source-file (source) : 生效當(dāng)前配置文件
- new-window : 新建窗口,默認(rèn)快捷鍵 prefix c
- split-window : 分屏
自定義狀態(tài)欄
喜歡 solarized 主題,但是背景色在終端下不大漂亮,選擇了 tomorrow 中的一個(gè)背景色替代。
message-command-style
設(shè)置狀態(tài)欄信息的樣式,以逗號(hào)分隔,可設(shè)置前景色 fg,背景色 bg,與文字修飾,如斜體 italics,粗體 bold 等等。如下例
"fg=yellow, bg=#abcdef, underscore" 復(fù)制代碼自定義狀態(tài)欄
可以自定義狀態(tài)欄的內(nèi)容,如窗口號(hào),窗口名,host,用電量,時(shí)間等等。
- #{host} tmux 會(huì)提供一些關(guān)于自身狀態(tài)的變量,比如 session-name,window-name,host 等等。比如以 #{host} 這種形式來代替 host,#{window-name} 代替 window-name。
- #(uptime) 除了在狀態(tài)欄中 tmux 相關(guān)信息,有時(shí)還需要取到系統(tǒng)相關(guān)信息,如開機(jī)時(shí)間,當(dāng)前用戶。這些系統(tǒng)命令可以表示為 #(uptime)。
Tmux Tricks
保持 ssh 連接
每次新建 session 的時(shí)候帶上名字,方便下次 attach 。稍微提一個(gè)命令 detach,默認(rèn)快捷鍵 prefix d,會(huì)先 detach 掉當(dāng)前 session。
$ tmux new -s shanyue $ tmux detach $ tmux attach -t shanyue 復(fù)制代碼快速移動(dòng)面板
移動(dòng)面板命令為 select-pane,可配置為 vim 式的移動(dòng)命令。
bind -r h select-pane -L bind -r l select-pane -R bind -r j select-pane -D bind -r k select-pane -U 復(fù)制代碼其中,參數(shù) -r 代表可重復(fù)按鍵,比如 prefix r r 表示 prefix r, prefix r。其中按鍵時(shí)間需要通過 repeat-time 來設(shè)置,一般為500ms。
另外,也可以開啟鼠標(biāo)支持,通過鼠標(biāo)快速移動(dòng)面板。
向終端發(fā)送 prefix key
我習(xí)慣 Crtl-s 來作為前綴鍵,send-prefix 為向終端發(fā)送前綴鍵的命令。
set -g prefix2 C-s bind C-s send-prefix -2 復(fù)制代碼重命名窗口名
rename-window 為重命名窗口名的命令,默認(rèn)快捷鍵 prefix ,。
但是有一個(gè)小問題,每當(dāng)重命名窗口名后,敲幾個(gè)空格又會(huì)自動(dòng)重命名,自己的辛勤工作又被破壞了...
需要配置以下兩個(gè)配置把它倆給關(guān)了,終于可以重命名了
set -wg allow-rename off set -wg automatic-rename off 復(fù)制代碼配置編輯和重啟快捷鍵
把打開和重啟配置文件設(shè)為快捷鍵可以快速提高配置效率。設(shè)置 prefix r 重啟并更新配置,便于調(diào)試配置文件。prefix e 打開配置文件。
source ~/.tmux.conf 使配置文件生效,即重啟配置。 new-window -n <window-name> command 新建窗口,并設(shè)置窗口名,-n 代表新建的窗口名
bind r source ~/.tmux.conf\; display "tmux config sourced" bind e neww -n tmux-config "\${EDITOR:-vim} ~/.tmux.conf 復(fù)制代碼開啟鼠標(biāo)支持
$ tmux set -g mouse on
鼠標(biāo)支持默認(rèn)是關(guān)閉的,開啟鼠標(biāo)后,支持復(fù)制,翻屏,切換面板,切換窗口,resize。
鼠標(biāo)支持的功能很強(qiáng)大,至此已經(jīng)成功打造了一個(gè) iterm2 了。不過鼠標(biāo)模式我不大喜歡,所以還是禁了。
何況,開啟鼠標(biāo)支持后,誰都可以操作我的終端了,一點(diǎn)逼格也沒有了
保持當(dāng)前路徑
新開 pane 和 window 時(shí),保持當(dāng)前路徑。為以前的命令添加參數(shù) -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}" 復(fù)制代碼最大化當(dāng)前面板
命令為 tmux resize-pane -Z,默認(rèn)快捷鍵為 prefix z。需要查看更加詳細(xì)的信息時(shí)可以按 prefix z 進(jìn)入全屏,完畢之后,再按一次恢復(fù)。相當(dāng)酷的一個(gè)功能。
翻屏
第一次使用 tmux 時(shí), 使用webpack,輸出信息很多,而有用的錯(cuò)誤信息被覆蓋。此時(shí),往上翻屏就很重要了。此時(shí)要說下 tmux window 下的兩種模式,
-
default-mode
就是剛進(jìn)入 tmux 默認(rèn)的模式。
-
copy-mode:
按 prefix [ 鍵進(jìn)入此模式,類似于 vi(emacs) 的 normal mode,支持復(fù)制,粘貼,查找,以及翻頁。具體是 vi 還是 emacs 可以根據(jù)以下命令探知,表明查看全局窗口設(shè)置 mode-keys,默認(rèn)會(huì)是 vi,如果不是,那就請(qǐng)?jiān)O(shè)置為 vi 吧~
$ tmux show-window-options -g mode-keys 復(fù)制代碼與 vi 命令相同,如上下翻頁(半屏)可使用 C-d 以及 C-u,當(dāng)然你也可以使用 hjkl。
另外,也可以開啟鼠標(biāo)支持,使用滾輪來翻屏。
復(fù)制與粘貼
上邊說到 copy-mode,接下來是復(fù)制與粘貼。進(jìn)入 copy-mode 后,v 開始選中,y 來進(jìn)行復(fù)制并會(huì)退出 copy-mode。使用 prefix ] 來進(jìn)行粘貼。
v & y 為自定義配置,配置如下
bind -t vi-copy v begin-selection bind -t vi-copy y copy-selection 復(fù)制代碼復(fù)制操作會(huì)把內(nèi)容存進(jìn) buffer 里,熟悉以下幾個(gè)命令能夠更熟練地操作 buffer
$ tmux list-buffers # 列出所有 $ tmux show-buffer -b [name] # 顯示最近 buffer,也可指定 buffer name $ tmux choose-buffer    # 進(jìn)入選擇 buffer 界面,更加靈活 復(fù)制代碼另外,也可以開啟鼠標(biāo)支持,用鼠標(biāo)來選擇文字。
查找關(guān)鍵字
既然進(jìn)入 copy-mode,熟悉 vi 的朋友一定知道查找是 / 與 ?。
快速定位窗口
假設(shè)你新建了多個(gè)窗口,需要快速定位到某一個(gè)窗口,而你雖知道那個(gè)窗口中的內(nèi)容,卻忘了窗口號(hào),這樣如何解決呢?
有一個(gè)很好的解決方案的命令便是 find-window,更好用的便是默認(rèn)的快捷鍵 prefix f。輸入窗口內(nèi)容的關(guān)鍵字,便可以快速定位到窗口,不過有一個(gè)小小的缺點(diǎn),便是不能定位到面板!
Last but not least
man tmux ! **不看文檔不足以熟練,不看源碼不足以精通。**所以,平常需要多看幾眼文檔,多瞧幾個(gè)命令。
擴(kuò)展
- practical-tmux
- gpakosz/.tmux (stars 1569)
- tmux-resurrect 保護(hù)和恢復(fù)工作狀態(tài)
轉(zhuǎn)載于:https://juejin.im/post/5d33d45b5188254d3c5e59f0
總結(jié)
以上是生活随笔為你收集整理的Tmux: 打造精致与实用并存的终端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vs Code 配置C/C++ 开发环
- 下一篇: 凭借K2 SmartObject框架,在