画面のようにtmuxのウィンドウ内のペインをどのように循環させるのですか?


41

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

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

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

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

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


あなたの用語は少しわかりにくいです。ではtmux、ウィンドウ複数のペインに分割することができます。キーバインドを使用してウィンドウ内のペイン間を循環しようとしていますか?
-jasonwryan

ツールの命名法に従っていましたが、混乱していることは認めます。あるペインから別のペインにフォーカスを変更する方法を知っています。私が見つけようとしているのは、レイアウトを変更せずに特定のペインに表示されているものを循環させる方法です。
FooBar

コンテンツをあるペインから別のペインに移動するには?お探しswap-paneですか?画面をエミュレートする場合はCtrl-a n、tmuxと同等ですCtrl-b n
-jasonwryan

回答:


28

tmuxscreenには異なるモデルがあるため、まったく同じものはありません。

では、スクリーン用語、分割はあなたが同時に複数のウィンドウを表示することができます。nextC-a n)分割のアクティブな部分でウィンドウを回転します。これにより、分割のアクティブな領域で「隠された」ウィンドウを回転させることができます。

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


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

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

これを~/.tmux.confファイルに入れたいと思うかもしれませんがPrefix :、現在のサーバーインスタンスにバインドするために、入力して貼り付けるだけで済みます。

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

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

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

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

    Prefix ":split-window

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

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

    Prefix c:new-window

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

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

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

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

    Prefix Up/ Down/ Left/ Rightを使用して、ペイン間を移動できます。

  • バインディングを呼び出して、現在のペインを「ペインコンテナ」ウィンドウの最初のペインと交換し、(「舞台裏」)ペインを「ペインコンテナ」ウィンドウ内で回転させます(次回バインディングを実行するとき、最初のコマンドシーケンスの「次の」ペインと交換します)。

    Prefix Control- n(バインディングはCnを使用しますが、これを好きなものに変更できます)。

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

bind-key Cp swap-pane -s:+。bottom \; rotate-window -Dt:+

ありがとうございました!素晴らしい説明とあなたの提案したバインディングは、少なくとも私が探していた機能を再現しているように見えます。
FooBar

すみません、フルサイズのペインを1
つにし

1
@JamesAndino:tmux 1.8にはresize-pane -Z(デフォルトではPrefix + zにバインドされています)、ペインを一時的にウィンドウのフルサイズに「ズーム」します。1.8より前のバージョンでは、組み込みの方法はありませんでした。他のものは、他の組み込みコマンドからスクリプト化されたソリューションを作成しました(たとえば、tmuxのペインを「最大化する」 SU質問に対する回答の一部)。
クリスジョンセン

TY、コンパイルしてロードされた
MageProspero

3
C-b oサイクルペインだと思います。
サムセリコフ14

39

私は、あなたが探しているものを信じてCtrlb(+ )。これらにより、ペイン間を移動できます。


2
すみませんが、あまりはっきりしていませんでした。パネル間を移動する方法を見つけました。tmuxでは、Ctrl b + oは画面のCtrl a + Tabとほぼ同じように機能します。私が探しているのは、画面のCtrl a + nと同等の機能です。
FooBar

方法について@FooBar Ctrl-b+{Ctrl-b+}?それは私がその機能に見つけることができるほど近いです。ペインは、画面で処理されるため、tmuxでは同じ方法で実行されません。
sparticvs

強調表示されたペインの焦点を合わせるのに苦労することがよくあります^b↑。たとえば、2つのペインがある場合、しばしばを押します。次に、強調表示されたペインを実際にフォーカスして、tmuxではなくシェルが別のペインをキャプチャするようにするにはどうすればよいですか?
-ThorSummoner

6

を使用してbind -rprefix一度押すと、シーケンス内の他のキーを押してペインを見つけることができます。タイムアウトはによって調整できます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

2

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

## 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

あなたが私よりも怠lazな場合は、マウスによるペインナビゲーションを許可する次のコードにも興味があります。(使用法:キープレフィックス+ 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

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

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

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

はい、これは狂ったUNIXの哲学です。始めましょう:

# 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-b Ctrl-b n、とを使用する必要がありpます。

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

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

そして、それだけだろうCtrl-b np、内側の窓のサイクルに、かつCtrl-a o外側ペインサイクルへ。

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

$ tmux new-session -t inner

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

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

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


0

に次のコードを追加します.tmux.conf

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

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

Tmux 2.8でテスト済み。


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

bind-key    -T prefix       o                 select-pane -t :.+
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.