web-dev-qa-db-ja.com

tmuxペインをウィンドウに移動する

複数のウィンドウがある場合、tmuxで既存のペインを別のウィンドウに移動するにはどうすればよいですか?

私はscreenから来ています。ここで、ペインに切り替えてから、目的のウィンドウに到達するまでウィンドウを切り替えます。 tmuxはこれを許可していないようです。

241
mrlanrat

これを行うコマンドは join-pane tmux 1.4で。

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

これを簡単にするために、私はこれらのバインドを.tmux.confそのため:

# pane movement
bind-key j command-Prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-Prompt -p "send pane to:"  "join-pane -t '%%'"

1つ目はターゲットウィンドウからペインを取得して現在のウィンドウに結合し、2つ目はその逆を行います。

次に、セッション内から次のコマンドを実行して、tmuxセッションをリロードできます。

$ tmux source-file ~/.tmux.conf
221
jasonwryan

join-paneが答えです。私もtmuxのドキュメントに基づいて使用しようとして問題がありました。 -tおよび-sスイッチが[session]:windowではなく[session:]windowを受け入れるように見えることを発見しました。つまり、セッションの指定はオプションですが、:を含めることは必須です。 (私はtmux 1.5を使用しています)

したがって、現在のウィンドウにペインを追加し、ウィンドウ1をペインに配置するには、コマンドは(Ctrl+B またはあなたのバインドキーが何であれ、続いて)...

:join-pane -s :1

次に、デフォルトで次のようなブレークペインを使用して、それらを分解できます。 Ctrl+B! それをショートカットにバインドしたい場合は、sのようなデフォルトのバインドをオーバーライドしないことをお勧めします。これは、将来、インターネットでchoose-sessionを含む回答を探し、システムで機能しないためです。ブレークペインがバインドされていることに注意してください ! そして @ そのすぐ隣にあり、デフォルトでは何にもバインドされていません。そのため、このバインディングをお勧めします...

bind-key @ command-Prompt -p "create pane from:"  "join-pane -s ':%%'"

あるいは、インタラクティブなセレクターを使用するには...

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key C-@ choose-window 'join-pane    -s "%%"'

または、常に最後にアクセスしたウィンドウに常に参加するには...

bind-key @ join-pane -h -s !

注:-hを指定すると、デフォルトの動作とは逆に、ペインが水平方向に(垂直方向に分割されて)スタックされます。

最も重要なことは、あなたがあなたがショートカットすることを選択したものは何でも学ぶということです。設定しただけで忘れてしまうと、外部サーバーで自分を見つけたときにぎこちないことになります。それに直面してみましょう。ターミナルマルチプレクサーが提供する最も重要なことは、リモートサーバーでの信頼性の高いセッションです。

これで、GNU ScreenからTmuxへの変換が完了しました。振り返ることはありません。

楽しい!

167
Bruno Bronosky

ペインを独自のウィンドウに移動するために使用してきたものが気に入っています。私が使う

break-pane -t :

私は実験を通してそれを理解しましたが、それは非常にうまく機能しているようです。キーバインドまたはエイリアスを簡単に設定でき、スクリプトは必要ありません。

45
Joshua K

キーバインド

デフォルトでは、 Ctrl+b、 ! breakアクティブペインを新しいウィンドウに切り替えおよび切り替えます。

どこ Ctrl + b tmux のデフォルト prefix です。

細部

このキーが実行するtmuxコマンドは break-pane (エイリアス:breakpcmd-break-pane.c および key-bindings.c でデフォルトとしてバインド list-keys (エイリアス:lsk)コマンド出力:

bind-key    -T prefix       !                 break-pane
15
user86041

ペイン識別子をプロンプトに入力したくない場合は、

bind-key j "join-pane -s !"

最後のアクティブなペイン/ウィンドウを現在のウィンドウに結合します。

14
Bernhard T

他の回答を調べてtmuxのマニュアルページをよく読んだ後、私は今のところ次のバインディングを決定しました。

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

これにより、結合するウィンドウを対話的に選択し、小文字のs/vバインディングをミラーリングして、新しい垂直/水平分割を作成できます。誰かがウィンドウではなく個々のペインを選択する方法を知っている場合は、私に知らせてください。

14
toupeira

キー割り当てを変更する必要はありません。

移動したいペインにフォーカスがある間、Prefixと入力し、次に:join-pane -t :1と入力します。ここで1は、同じセッション内の宛先ウィンドウの番号です。 project:3のように名前を前に付けると、別のセッションに移動できます。私にとっては、join-panejのタブオートコンプリートです。

コマンドに-hまたは-vスイッチを追加して、宛先で作成された新しいスプリットの方向を設定するか、単にそれに移動してPrefixspace 再配置します。

4
Walf