Linux

循環同名的tmux視窗

  • April 27, 2021

這個問題(據我所知)以前沒有被問過,但是任何使用 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 等)。幸福!

我自己試過了,但沒有成功:(

我創建了一個基本解決方案。

  1. 將以下腳本另存為_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 …,保留或反轉順序(cattac從 的擴展$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的測試解決方案(預設prefixCtrl+ b)。

引用自:https://unix.stackexchange.com/questions/646914