2011-02-02 19:53:22 +0000 2011-02-02 19:53:22 +0000
436
436

tmuxのウィンドウを並べ替えるにはどうすればいいですか?

screenでは、C-a :number 0と入力するだけでウィンドウをウィンドウリストの一番上に移動させ、他のウィンドウを一つ下に押し下げることができます。tmux に相当するコマンドシーケンスは何ですか?マニュアルページを見てみましたが、この点で混乱しています。

回答 (19)

491
491
491
2011-03-01 09:39:45 +0000

swap-window コマンドは、あなたが望むものに最も近いものです。

“Prefix :” (デフォルトでは Ctrl+B, : です) を押すと、tmux-command プロンプトが表示されます。そこで以下のように入力する。

swap-window -s 3 -t 1

と入力して、ウィンドウ番号 3 とウィンドウ番号 1 の位置を入れ替える。

swap-window -t 0

と入力して、ウィンドウ番号3とウィンドウ番号1の位置を入れ替えます。

move-window -t 0

万が一、インデックス0にウィンドウがない場合は、次のようにします。

bind-key T swap-window -t 0

(base-indexが0の場合、デフォルトでは0になっています)。

0x1&

2x2& (base-indexがデフォルトで0の場合) とします。

0x1&

279
279
279
2013-02-15 11:18:09 +0000

Garethさんの回答に加えて、以下のキーバインド

bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1

Ctrl+Shift+Leftを押すと(現在のウィンドウを左に移動します。同様に右に移動します。修飾子(C-b)を使用する必要はありません。

tmux 3.0 バージョンでは、以下のキーバインドを使用する必要があります。

67
67
67
2011-04-05 22:12:22 +0000

:number 42に相当するtmuxは:move-window -t 42です。

17
17
17
2013-07-09 22:16:07 +0000

私はこのようにウィンドウの番号を変更します。

Ctrl+b, ., 222

とすると、現在の tmux のウィンドウ(全ペイン)の番号は 222 になります。


関連して。また、そこから Ctrl+b, :new-session -d -s "reading", ., reading を使って、現在のウィンドウ(すべてのペインを一度に)を読み込みセッションに移動させることもできます。Ctrl+b, sを使ってセッション内をブラウズするのと同じように、Ctrl+b, wを使ってセッション間をブラウズすることができます。

HTH

12
12
12
2012-04-16 15:42:48 +0000

screennumber のどちらかを選択する外部シェルスクリプトを使用して、swap-windowmove-window コマンドと同等のものを実装することができます。

bind < command-prompt -p index "run-shell '~/.tmux.number.sh %%'"

~/.tmux.number.sh のようにキーにバインドすることができます。

#!/bin/bash
if [$# -ne 1 -o -z "$1"]; then
    exit 1
fi
if tmux list-windows | grep -q "^$1:"; then
    tmux swap-window -t $1
else
    tmux move-window -t $1
fi
``` 0x1&
8
8
8
2011-12-12 03:13:19 +0000

Using swap-window to move to any id. “most to screen’s :number”

# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:" "swap-window -t '%%'"

[m for move –> hit prefix-m and enter say 3 .to renumber window to 3] [m for move –> hit prefix-m and enter say 3 .]

5
5
5
2016-03-18 17:08:47 +0000

Ashish Arigaさんの回答がバージョン1.9a以下では動作しないので。<>を使って、.tmux.confに以下の行を追加して、それぞれウィンドウを左右に入れ替えています。

# swap window to left or right
bind-key -r < swap-window -t -1
bind-key -r > swap-window -t +1
4
4
4
2015-02-09 12:34:24 +0000

manからの最も簡単な解決策は、デフォルトのバインディングを使用することです。

{ Swap the current pane with the previous pane.
} Swap the current pane with the next pane.
3
3
3
2016-01-26 00:48:42 +0000

byobu を tmux のラッパーとして使用している方は、byobu を使用することで、現在のウィンドウを前のウィンドウや次のウィンドウと入れ替えることができます。

Ctrl-Shift-F3
Ctrl-Shift-F4

0x6& で定義されているキーバインディングは興味深いものです。

bind-key -n C-S-F3 swap-window -t :-1
bind-key -n C-S-F4 swap-window -t :+1
2
2
2
2016-12-13 06:50:32 +0000

base-indexbase-indexに設定すると、1move-window -rから始まる全てのウィンドウの番号を変更し、1のスロットにウィンドウを移動させることができます。

set base-index 1
move-window -r
move-window -t 0

終了後、0のウィンドウを移動せずに後からbase-indexを使用したい場合は、0move-window -rにリセットすることができます。

2
2
2
2016-12-29 18:30:54 +0000

tmux-pain-control は、フォーカスされたウィンドウを左右に移動させるためのctrl-b >ctrl-b <を提供しています。

2
2
2
2013-06-24 20:29:13 +0000

私が使用しているアプローチは、Ashish氏の回答とpiec氏の回答を少し組み合わせたものです。左矢印と右矢印を、最初か最後のウィンドウでない限り、敬意を払って、ウィンドウを左右に1つずつ移動させるシェルコールアウトにバインドしています。これを行ったのは、最後のウィンドウで swap +1 (または最初のウィンドウで swap -1) を発行しても、期待されるようなループを繰り返すのではなく、スワップを実行してくれるからです。

0:one 1:two 2:three 3:zero*

これを base-indexrenumber-windows と組み合わせれば、任意の番号から始まり、隙間のないウィンドウのリストを簡単に作成することができます。

私のように base-index 1 を使っていて、999個以上のウィンドウが出てこないと思っている場合は、ちょっとしたトリックを使って適切に転がすことができますが、コマンドは少し肥大化します。

0:zero* 1:two 2:three 3:one
0:zero* 1:one 2:two 3:three

これは、最後のウィンドウを一時的に使用されていないインデックス 0 に移動させ、move-window -r を呼び出して、それらのウィンドウの番号を再び 1 から始めることで動作します。これは、最初のウィンドウを最後に移動させるときにも同様の動作をします。これは refresh-client -S が気になる場合、-move-window からの並び替えが正常に動作している間に、さらに変更が加えられるまでステータスバーが更新されないことがあるために必要です。ステータスバーだけを強制的に更新する (-S) ことで、これを回避することができます。

この方法で見つけられる唯一の問題は、swap-window が最後に使用していたウィンドウを暗黙のうちにスワップしたウィンドウに変更してしまうことです。したがって、もしあなたがウィンドウ#1を使っていて、ウィンドウ4に切り替えて1つ戻した場合、最後に使っていたウィンドウは#1ではなく、新しい#4(以前は#3)になっていることに気づくでしょう。これを回避する方法はないようです。

1
1
1
2017-10-07 08:44:19 +0000

swap-window -s 5swap-window -t 5 はどちらも現在のウィンドウをウィンドウ 5 と入れ替えますが、意味合いは異なります。

swap-window -s 5

  • 現在の Win 番号でウィンドウ 5 プログラムが有効。
  • 最近のウィンドウ番号は変更されない。
  • 同じコマンドを繰り返すと前の状態にロールバックします。

swap-window -t 5

  • 現在のプログラムは番号5で有効です。
  • 現在のウィンドウ番号への最近のオーバーライド。

numberswap-window -s number-t number は、5 などの absolute と -1, +2 などの relative の両方の可能性があります。

P.S. 下記は、swap-window -s 5

の影響を示す tmux のステータスラインの抜粋です。
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc

last-windowの後。
[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc

swapw -s 5別の[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim
swapw -s 5

別の[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
last-window

1
1
1
2018-07-04 22:36:52 +0000

tmux ウィンドウから、以下のようにしてウィンドウ 0 と 1 を入れ替えてみてください:

$ tmux swap-window -d -s 0 -t 1

0
0
0
2016-05-15 14:31:11 +0000

まず、tmuxコマンドのプレスとリリースを開きます。

Ctrl + b

そして、実際のウィンドウを右のウィンドウに変更するには(順番に)

}

実際のウィンドウを左に変更するには:

{
  • SHIFTまたは}を押すときには{を使うことを忘れないでください。
0
0
0
2017-09-14 10:58:56 +0000

参考までに。

私はこのスクリプトをハックして、"TUI “内の全てのウィンドウを順番に並べることができるようにしました。これは全てのウィンドウを一時ファイルにリストアップし、デフォルトのエディタで開きます($EDITORを設定していると仮定します)。この後、行を並べ替えることができ、ファイルを保存して閉じると、それに応じてウィンドウが並べ替えられます。(これはgit rebase -iをするときのコミットの順番と似ています)

#!/bin/bash

# Usage: tmux-mv    
# Move your tmux windows around in an editor

tmpfile=$(mktemp)
tmux list-windows > $tmpfile
$EDITOR $tmpfile

# Move all windows to 50..x in the order you just specified
# Assumes you don't have 50 windows already(!)
cat $tmpfile | awk -F ":" '{ print " -s " $1 " -t 5" NR-1 }' |\
  xargs -I {} sh -c 'tmux move-window -d {}'

# Move them back down, retaining the order
tmux move-window -d -r
rm $tmpfile

これはおそらく、特にかなり改善されていると思われます。

NOTE .

NOTE : コマンド実行後に別のウィンドウに移動される可能性があります。 動作中の gif (github)

0
0
0
2018-05-22 20:05:43 +0000

ここでの答えはどれも納得できなかったので、screenのウィンドウ移動動作をtmuxのために真似したスクリプトを書いてみました。

移動先のウィンドウ番号が最小のウィンドウ番号より小さいか、最大のウィンドウ番号より大きいかを検出し、検出した場合、他のすべてのウィンドウを右または左に(それぞれ)移動させて、1からNまでの番号を漸増的に付け直す。これは move-window コマンドで行います。

ウィンドウ番号が最小値と最大値の**の間にある場合(つまり、おそらく既存のウィンドウ番号と一致する場合)、swap-windowコマンドでそれらを入れ替えます。

以下はスクリプトです。

#!/usr/bin/env bash
# Filename: ~/tmux-windowswap
# Function that provides improved window-swapping functionality for tmux
maxwin="$(tmux list-windows | cut -d: -f1 | sort -nr | head -n1)"
minwin="$(tmux list-windows | cut -d: -f1 | sort -n | head -n1)"
# Error checking
if [[-z $2]]; then
  echo "Error: No window specified."
elif [[! $2 =~ ^-?[0-9]+$ ]]; then
  echo "Error: Bad window number specified."
# Bigger than everything; slide it to the far right, then renumber
elif [[$2 -gt $maxwin]]; then
  i=0 # intialize
  tmux move-window -t:$(($maxwin+1))
  winlist="$(tmux list-windows | cut -d: -f1 | xargs)"
  for n in $winlist; do
    i=$(($i+1)) # increment
    tmux move-window -s:$n -t:$i
  done
# Smaller than everything; slide it to the far left, then renumber
elif [[$2 -lt $minwin]]; then
  tmux move-window -t:0
  winlist=($(tmux list-windows | cut -d: -f1 | xargs | rev))
  i=${#winlist[@]} # initialize; start at highest indexed window
  for n in ${winlist[@]}; do
    tmux move-window -s:$n -t:$i
    i=$(($i-1)) # decrement
  done
# In-between; just a simple swap
else
  tmux swap-window -t:$2
fi

次に、この単純なキーバインドを .tmux.conf に追加します。

bind m command -p "Send window to:" "run -b '~/tmux-windowswap #I %1'"

. screenのウィンドウスワッピング動作を完全に真似るために、既存のウィンドウ番号にウィンドウを移動すると、そのウィンドウがその場所に移動し、他のすべてのウィンドウがに移動すると思います。このスクリプトを修正するのはかなり簡単です。

0
0
0
2014-10-31 15:53:04 +0000

これが私が使っている方法です。使われているインデックスにウィンドウを移動することはできませんが、1つ上のインデックス(使われていないインデックス)にウィンドウを移動して、前のインデックスがあった隙間に再配置することができます。

3つのウィンドウがあり、4つ目のウィンドウを追加したいとしますが、以前3つのウィンドウがあった場所に配置します。

新しいウィンドウを追加する前に。Tmux prefix then .を押すと、moveコマンドが開きます。4 と入力すると、3 のインデックスが 4 になりますので、別のウィンドウを追加するだけでインデックス 3 になり、古いウィンドウはインデックス 4 になります。

0
0
0
2019-09-16 23:39:34 +0000

Ctrl + b + :)

Ctrl + b + :

その後、新しい(フリーの)ウィンドウ番号を入力して Enter を押す

フリーのウィンドウ番号がある場合、Ctrl + b + .を使ってウィンドウの番号を変更します。

(ヒント: どれがどれなのか分からなくなったら、Ctrl + b + でウィンドウに名前を付けてください)