Linux
循環同名的tmux視窗
這個問題(據我所知)以前沒有被問過,但是任何使用 tmux 的人都會受益!我也嘗試在 github 上搜尋外掛等,但還沒有運氣。
我想達到的目標:
- 在同名視窗之間循環。
為什麼?
假設您有 6 個 tmux 視窗,按以下順序,狀態欄看起來類似於:
[0:zsh][1:vim][2:zsh][3:vim][4:zsh][5:vim]
如果我目前在視窗 0 (zsh) 中:
- 我想在 3 個“zsh”視窗(0,2,4)之間循環
如果我目前在視窗 1 (vim) 中:
- 我想在 3 個“vim”視窗(1,3,5)之間循環
這將允許您循環相同類型的視窗,而不必先重新排序所有視窗(vim 緊挨著 vim,zsh 緊挨著 zsh 等)。幸福!
我自己試過了,但沒有成功:(
我創建了一個基本解決方案。
- 將以下腳本另存為
_tmux-cycle-samename
並使其可執行 (chmod +x _tmux-cycle-samename
)。#!/bin/sh if [ "$1" = "-r" ]; then filter=tac; else filter=cat; fi name="$(tmux display-message -p '#W' | sed 's|\(.\)|[\\\1]|g')" tmux select-window -t "$( tmux list-windows -F '#{window_active} #{window_id} #W' \ | grep '^[01] @[0123456789]* '"$name"'$' | "$filter" \ | awk ' NR==1 {result=$2} { if (seen==1) {result=$2; exit} seen=$1 } END {print result} ' )"
該腳本檢索正確的名稱 (
tmux display-message …
) 並準備字元串 (sed …
),因此當稍後解釋為正則表達式時,名稱將按字面意思匹配。然後腳本列出視窗(tmux list-windows …
),選擇匹配的視窗( )grep …
,保留或反轉順序(cat
或tac
從 的擴展$filter
)並找到下一個非活動視窗(awk …
)。最後選擇找到的視窗 (tmux select-window …
)。 2. 將這些添加到您的~/.tmux.conf
:bind-key -T prefix > run-shell '/full/path/to/_tmux-cycle-samename' bind-key -T prefix < run-shell '/full/path/to/_tmux-cycle-samename -r'
如果
_tmux-cycle-samename
可以通過PATH
那麼您不需要指定完整路徑。 3. 如果已經在裡面,tmux
那麼執行tmux source-file ~/.tmux.conf
。重新啟動的tmux
伺服器將自動獲取文件。 4. 嘗試prefix``>
並prefix``<
在您tmux
的測試解決方案(預設prefix
為Ctrl
+b
)。