私が達成したいもの:

私が達成したいもの:

この質問は(私が知っている限り)以前に質問されたことはありませんが、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

基本的なソリューションを作成しました。

  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 …)。

  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.conftmux再起動されたサーバーは自動的にこのファイルを取得します。

  4. (デフォルトは+)prefix>でソリューションをテストしてみてください。prefix<tmuxprefixCtrlb

おすすめ記事