web-dev-qa-db-ja.com

画面のようにtmuxのウィンドウ内のペインを循環するにはどうすればよいですか?

tmuxペインをウィンドウに移動する も同じ質問だと思いましたが、そうではないようです。

GNU screenを定期的に使用することから来て、同じことを行うtmuxを探しています。定期的に行うことの1つは、いくつかのウィンドウが開いていることです。 vim、およびいくつかのターミナルウィンドウが開いてコードをテストし、場合によっては他のさまざまな目的でウィンドウを1つまたは2つ開きます。画面を垂直に分割すると、多くの場合、上部ペインにvimウィンドウが表示され、次に他のウィンドウの1つが表示されます。下の悩み。

次に使用する主なコマンドは CtrlaTab ペイン間で回転し、 Ctrlan ペイン内のウィンドウ間で回転します。たとえば、上のペインにvimがある状態で、下のペインに切り替えてから、他のターミナルを回転させて、必要なことをすべて行います。画面は常に分割されたままです。

問題は、画面に匹敵する機能が見つからないことです Ctrlan tmuxで。ウィンドウの切り替えはペイン内では機能しないようですが、完全にジャンプします。画面が分割されている場合、2つのオプションは、分割されていないウィンドウにジャンプしてから分割するか、ペインのサブ分割を行うことです。どちらも私が探していたものではありません。

提案(画面にこだわるだけでなく)?

45
FooBar

tmuxscreenはモデルが異なるため、同等のモデルはありません。

screenの用語では、分割により複数のウィンドウを同時に表示できます。 nextC-a n)は、スプリットのアクティブな部分でウィンドウを回転させます。これにより、スプリットのアクティブな領域で「非表示」ウィンドウを回転できます。

tmuxの用語では、分割によってウィンドウが1つ以上のペインに分割されます。分割ウィンドウの各部分は個別のペインであり、ペインが非表示になることはありません(ウィンドウが選択されている(表示されている)場合、そのすべてのペインも非表示になります)。また、ペインは1つのウィンドウの単一の分割でのみ使用できます(ペインは複数のウィンドウに配置することはできません。また、同じウィンドウの複数の分割に配置することもできません)。ウィンドウ内(またはウィンドウ間)でペインを移動するコマンドがありますが、screennextと同じ方法ではありません。


次のようなバインディングを使用して、同様の効果を調整できます。

bind-key C-n swap-pane -s :+.top \; rotate-window -Ut :+

おそらくこれを~/.tmux.confファイルに入れたいと思うでしょうが、後にタイプ/貼り付けするだけです Prefix: 現在のサーバーインスタンスにバインドします。

バインディングを使用するには、「メインウィンドウ」を選択して分割し、「メインウィンドウ」の直後に「ペインコンテナー」ウィンドウを作成してから、バインディングを使用して「メインウィンドウ」内の任意のペインを「ペインコンテナ」ウィンドウ。

セットアップを作成する方法は次のとおりです。

  • 「メインウィンドウ」として使用するウィンドウを選択します。起動(例)Vimその中で。

  • 「メインウィンドウ」を2つのペインに分割します。

    例えば。 Prefix" (:split-window

    このペインをテストウィンドウ(またはログビューアなど)として使用できます。

  • メインウィンドウの直後に新しいウィンドウ(「ペインコンテナー」)を作成します。

    例えば。 Prefixc (:new-window

    「メインウィンドウ」と「ペインコンテナー」ウィンドウのインデックスの間に他のウィンドウが入り込まないことが重要です(バインドされたコマンドで使用されるウィンドウ指定子の+は、「次に大きい番号のウィンドウ」を意味します)。

  • このウィンドウをいくつかのペインに分割します。 3つのペインを回転するには、このウィンドウを2つのペインに分割します(3番目のペインは「メインウィンドウ」のペインです)。

    git用のシェルと、データベースインターフェースを実行するためのシェルが必要な場合があります。それぞれをこの「ペインコンテナー」ウィンドウの個別のペインに配置します。

  • 「メインウィンドウ」に戻ります。 「回転」させるペインを選択します。

    使用できます PrefixUp/Down/Left/Right ペイン間を移動します。

  • バインディングを呼び出して、現在のペインを「ペインコンテナー」ウィンドウの最初のペインと交換し、(「背後」で)「ペインコンテナー」ウィンドウ内でペインを回転させます(そのため、次回バインディングを実行するときに、最初のコマンドがシーケンスの「次の」ペインと入れ替えます)。

    PrefixControl-n (バインディングはC-nを使用しますが、これを好きなように変更できます)。

  • ペインを逆方向にスクロールするには、以下を使用できます。

bind-key C-p swap-pane -s:+。bottom \;回転ウィンドウ-Dt:+
31
Chris Johnsen

あなたが探しているのは Ctrlb+(、 、 、 )。これらを使用すると、ペイン間を移動できます。

46
sparticvs

bind -rを使用すると、prefixを1回押してから、シーケンスの他のキーを押してペインを見つけることができます。タイムアウトはrepeat-timeで調整できます。チェックman tmux

bind -r Tab select-pane -t :.+

hjklをご希望の場合は、

bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R
8
zhazha

ショートカットALTまたはSHIFT +矢印を使用して、別のペインまたはウィンドウに移動できる小さな設定を次に示します。キープレフィックスを使用する必要はありません。

## NAVIGATION: ############################

# Switch panes 
# Usage: "ALT+arrow keys" (without prefix key)
# from https://Gist.github.com/spicycode
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Switch windows 
# usage: "SHIFT+arrow" (without prefix key)
bind -n S-Left  previous-window
bind -n S-Right next-window

私よりも怠惰な場合は、マウスによるペインのナビゲーションを可能にする次のコードにも興味があります。 (使用法:キーのプレフィックス+オンにするにはm、オフにするにはM)

## MOUSE CONTROL: #########################
set -g mode-mouse off
set -g mouse-resize-pane off
set -g mouse-select-pane off
set -g mouse-select-window off

# Toggle mouse on 
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'

# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

この設定は機能するはずですが、tmux 1.6から1.9では確実に機能します。

2
xaa

この答えは2つのペインを提供し、両方のペインは同じウィンドウのセットを保持しますが、各ペインは個別にウィンドウを切り替えることができます。

Tmuxのアプローチは、3つのセッションを使用することです。

  • ペインの外部セッション
  • windowsの内部セッション(1つのペインからこれに接続できます)、
  • (他のペインの)内部セッションへのセカンダリビュー

はい、これは NIXの哲学 狂っています。始めましょう:

# Create a session to hold the multiple windows
$ tmux new-session -s inner

    <Ctrl-b> c   to create a few windows, run some things

    <Ctrl-b> d   to detach, but leave it running

# Create a session to hold multiple panes (the view)
$ tmux new-session -s outer

    <Ctrl-b> "   to split

# Open the inner session in the current (bottom) pane
$ unset TMUX ; tmux attach -t inner

これで、通常どおり、上部ペインに切り替えてVimを開くことができます。内部セッション(下部ペイン)のウィンドウを循環するには、次を使用する必要があります。 Ctrl-bCtrl-bn そして p

余談:これは少し扱いに​​くいですが、外部セッションのプレフィックスをいつでも変更できます。に Ctrl-a、 このような:

<Ctrl-b> :set-option prefix C-a

その後、それは Ctrl-bn そして p 内側のウィンドウを循環させる Ctrl-ao 外側のペインを循環させます。

では、上部ペインでVimを開く代わりに、内部セッションに再度接続しましょう。 vimを終了し、今回はnew-sessionコマンドを使用します(特に-tではなく-sを使用):

$ tmux new-session -t inner

出来上がり!これで、上部ペインと下部ペインの両方でウィンドウを切り替えることができます。

2回目にnew-session -tを使用する必要があるのは、単にattach -tをもう一度実行すると、上部と下部のペインが同期し、常に同じウィンドウが表示されるためです。 。このペインが他のペインから独立してウィンドウを移動できるようにするために、新しい「ビュー」セッションを作成しますが、そのバックエンドを、ウィンドウを保持する既存のセッションに直接接続します。これは「 グループ化されたセッション 」とも呼ばれます。 (ちなみに、このリンクでは、セッション間でウィンドウを移動するために[un]link-windowを使用することも推奨されています。)

もちろん対称性のために、attachの代わりに下部のペインでtmux new-session -t innerを実行することもできます。その場合は、tmuxの4つのインスタンスを実行します(サーバー用にもう1つのtmuxプロセスを追加します)。

2
joeytwiddle

次のコードを.tmux.conf

# cycle prev/next pane
bind -n S-right select-pane -t :.+
bind -n S-left select-pane -t :.-

設定をリロードすると、(プレフィックスキーなしで直接)押すことができます Shift+ ペインを時計回りに循環させる Shift+ 逆方向に循環します。

Tmux 2.8でテスト済み。


設定を編集したくない場合は、 prefix+o 時計回りのサイクルのデフォルトのキーバインディングです。このキーバインディングをときどき見つけたので、tmux list-keysを自分のキーバインディングに使用します。

bind-key    -T prefix       o                 select-pane -t :.+
1
Reorx