tmux select-pane -LDUR コマンド - 自動ループ操作の無効化

tmux select-pane -LDUR コマンド - 自動ループ操作の無効化

select-paneコマンドが元々トリガされた方向にウィンドウが残っていなかった場合、tmuxウィンドウの反対側にあるウィンドウを選択させる動作を無効にできますか?

そうでない場合は、特定の方向に別のウィンドウがあるかどうかを確認する方法はありますか?

tmuxウィンドウに(v)分割アクティブウィンドウがなく、select-paneコマンドがトリガーされると、エラーメッセージが表示されます。これは予想される動作です。

あなたの答えに感謝します

答え1

次の項目に追加してください~/.tmux.conf

set-option -g default-shell /bin/bash
unbind Up     
unbind Down   
unbind Right   
unbind Left  
bind Up run-shell "if [ $(tmux display-message -p '#{pane_at_top}') -ne 1 ]; then tmux select-pane -U; fi"
bind Down run-shell "if [ $(tmux display-message -p '#{pane_at_bottom}') -ne 1 ] ; then tmux select-pane -D; fi"
bind Right run-shell "if [ $(tmux display-message -p '#{pane_at_right}') -ne 1 ]; then tmux select-pane -R; fi"
bind Left run-shell "if [ $(tmux display-message -p '#{pane_at_left}') -ne 1 ]; then tmux select-pane -L; fi"

デフォルトでは、これはtmuxバージョン2.6+で動作するはずです(その後、それらはpanel_at_top、panel_at_bottom、panel_at_left、panel_at_right環境変数を追加しました。

また、カスタムシェルを起動するにはset-option -g default-command fish(またはzshやcshなど)を使用してください。あるいは、bash以外のシェルをtmuxデフォルトシェルとして使用するには、(set-option -g default-shell)に設定し、必要なシェルスクリプトに上記のロジックを作成します。しかし、(私の場合と同様に)いくつかのシェルを使用すると、コマンドは単一行の利便性を提供しません(または一部のシェルについて十分にわからないか、複数の行がすぐに機能する可能性があります)シェル。

源泉:私が始めたgithubの問題スレッド

答え2

質問を投稿してくれたGilgamesh Skytrooperに感謝します。フラッグハブ。これは、複数のセッションを処理でき、シェルサブプロセスを呼び出さない単純なバージョンです。

bind -n M-a if -F '#{pane_at_left}'   '' 'select-pane -L'
bind -n M-d if -F '#{pane_at_right}'  '' 'select-pane -R'
bind -n M-w if -F '#{pane_at_top}'    '' 'select-pane -U'
bind -n M-s if -F '#{pane_at_bottom}' '' 'select-pane -D'

-nプレフィックス()を最初に押すには、それを削除してから必要に応じてC-bバインディングを変更します。M-[awds]

関連情報