この質問は(私が知っている限り)以前に質問されたことはありませんが、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 …
)、順序を維持または反転し(cat
またはtac
に従って展開し$filter
)、次の非アクティブウィンドウを探します(awk …
)。最後に見つかったウィンドウが選択されました(tmux select-window …
)。以下を次の項目に追加します
~/.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
フルパスを指定する必要はありません。すでに内部にいる場合は、
tmux
実行してくださいtmux source-file ~/.tmux.conf
。tmux
再起動されたサーバーは自動的にこのファイルを取得します。(デフォルトは+)prefix>でソリューションをテストしてみてください。prefix<
tmux
prefixCtrlb