screen
では、C-a :number 0
と入力するだけでウィンドウをウィンドウリストの一番上に移動させ、他のすべてのウィンドウを一つ下に押し下げることができますが、tmux
では、ウィンドウリストの一番上に移動させることができません。tmux
に相当するコマンド列は何ですか?マニュアルを見てみましたが、この点で混乱しています
493 dan 2011-02-02
swap-window
コマンドが一番欲しいものに近いです
“Prefix :” (デフォルトでは Ctrl+B, :) で tmux-command のプロンプトが表示されます。そこで以下のように入力します
swap-window -s 3 -t 1
を使用して、ウィンドウ番号3とウィンドウ番号1の位置を入れ替えます
現在のウィンドウを上のウィンドウと入れ替えるには、次のようにします
swap-window -t 0
万が一、インデックス0にウィンドウがない場合は、このようにします
move-window -t 0
(base-indexが0の場合、デフォルトでは0になっています)
~/.tmux.conf
に次のように追加することで、そのコマンドをキー(例えば “top “のT)にバインドすることができます
bind-key T swap-window -t 0
553 matlehmann 2011-03-01
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 のバージョンでは、以下のキーバインドを使用する必要があります
bind-key -n C-S-Left swap-window -t -1\; select-window -t -1
bind-key -n C-S-Right swap-window -t +1\; select-window -t +1
310 Ashish Ariga 2013-02-15
:number 42
に相当するtmuxは:move-window -t 42
です
75 Randal Schwartz 2011-04-05
こんな感じで窓の番号を変えています
Ctrl+b, .
, 222
とすると、現在のtmux
ウィンドウ(すべてのペイン)の番号が222になります
関連して。物をゴチャゴチャしているとやりたくなってしまいます
Ctrl+b :new-session -d -s "reading"
また、そこからCtrl+b, .
, reading
を使って、現在のウィンドウ(すべてのペインを一度に)を読み込み中のセッションに移動させることもできます。Ctrl+b, s
を使ってセッション間をブラウズすることができますが、Ctrl+b, w
を使ってセッション内をブラウズするのと同じです
HTH
20 isomorphismes 2013-07-09
screen
のnumber
コマンドと同等のものを、swap-window
とmove-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
13 piec 2012-04-16
swap-windowを使って任意のIDに移動します。画面の :number に最も近いもの)に移動する
# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:" "swap-window -t '%%'"
m は move –> prefix-m を叩いて 3 と入力すると、ウィンドウの番号を 3 に変更することができます
9 Karthik Gurusamy 2011-12-12
man
からの最も簡単な解決策は、デフォルトのバインディングを使うことです
{ Swap the current pane with the previous pane.
} Swap the current pane with the next pane.
7 jhvaras 2015-02-09
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
7 qun 2016-03-18
tmux-pain-control は、フォーカスされたウィンドウを左右に移動させるためのctrl-b >
とctrl-b <
を提供しています
5 pepper_chico 2016-12-29
私が使用しているアプローチは、Ashishさんの回答とpiecさんの回答を少し組み合わせたものです。左矢印と右矢印は、最初か最後のウィンドウでない限り、敬意を払って、ウィンドウを左か右に移動させるシェルコールアウトにバインドされています。これをしたのは、最後のウィンドウで swap +1 (または最初のウィンドウで swap -1) を発行しても、あなたが期待しているようにループして戻ってくるのではなく、スワップされたままになるからです
0:one 1:two 2:three 3:zero*
Becomes
0:zero* 1:two 2:three 3:one
Instead of
0:zero* 1:one 2:two 3:three
そのため、私が使用しているコマンドは、ウィンドウがリストの端に到達した時点で動作を停止します
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1'
これは、base-index や renumber-windows と組み合わせれば、任意の数から始まるウィンドウのリストを簡単に作ることができ、空白を持たないようにすることができます
私のようにbase-index 1を使っていて、999窓以上には行かないと思っている人は、コマンドが少し肥大化しますが、ちょっとしたコツを使えばちゃんと転がせるようになります
set -g base-index 1
set -g renumber-windows on
bind-key -n M-Left run-shell 'if tmux list-windows | head -n 1 | grep -q active ; then tmux move-window -t 999 \; move-window -r \; refresh-client -S ; else tmux swap-window -t -1 ; fi'
bind-key -n M-Right run-shell 'if tmux list-windows | tail -n 1 | grep -q active ; then tmux move-window -t 0 \; move-window -r \; refresh-client -S ; else tmux swap-window -t +1 ; fi'
これは、最後のウィンドウを一時的に使われていない index-0 に移動させ、その後 move-window -r を呼び出して再び 1 から番号を付け直すことで動作します。これは、最初のウィンドウを最後に移動させるときにも同様の動作をします。refresh-client -Sについて疑問に思っているのであれば、これは必要な機能です。ステータスバーだけを強制的に更新する(-S)ことで、これを回避することができます
この方法で見つけられる唯一の問題は、swap-window は最後に使っていたウィンドウを暗黙のうちにスワップしたウィンドウに変更してしまうことです。したがって、もしあなたがウィンドウ #1 を使っていて、ウィンドウ 4 に切り替えてウィンドウを 1 つ戻した場合、最後に使っていたウィンドウは #1 ではなく新しい #4 (以前は #3) になっていることに気づくでしょう。これを回避する方法はないようです
4 Alaska 2013-06-24
byobu
をtmuxのラッパーとして使っている人は、byobu
を使うと、現在のウィンドウを前のウィンドウや次のウィンドウと入れ替えることができます
Ctrl-Shift-F3
Ctrl-Shift-F4
これらのキーのためにbyobu
で定義されたキーバインディングは興味深いものがあるかもしれません
bind-key -n C-S-F3 swap-window -t :-1
bind-key -n C-S-F4 swap-window -t :+1
4 Dave Kuhlman 2016-01-26
base-index
を 1
に設定した場合、move-window -r
は 1
から始まるすべてのウィンドウの番号を変更し、0
がウィンドウをスロットに移動できるようにします
set base-index 1
move-window -r
move-window -t 0
終わったら、base-index
を0
でウィンドウを動かさずにmove-window -r
を使いたい場合は、base-index
を0
にリセットすることができます
3 eMBee 2016-12-13
swap-window -s 5
と swap-window -t 5
はどちらも現在のウィンドウをウィンドウ 5 と入れ替えますが、意味合いは異なります
swap-window -s 5
- 現在のwin番号で有効なwindow 5プログラム
- 最近のウィンドウ数は変わらず
- 同じコマンドを繰り返すと、前の状態にロールバックします
swap-window -t 5
- 現在のプログラムは、番号5で有効になっています
- 現在のウィンドウ番号への最近のオーバーライド
swap-window -s number
と-t number
のnumber
は、絶対値、例えば5、相対値、例えば-1、+2の両方である可能性があります
追伸 以下は 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
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
2 qeatzy 2017-10-07
tmuxウィンドウから、以下のようにしてウィンドウ0と1を入れ替えてみてください
$ tmux swap-window -d -s 0 -t 1
2 Hamdi Al-Haj 2018-07-04
choose-window’ コマンドに新しいキーの組み合わせをバインドしたいのではないでしょうか
manページを読んだことがあると思いますが、それを参照してみてください
具体的には、以下の4ページを見てください
1 None 2011-02-02
これが私が使っている方法です。占有されているインデックスにウィンドウを移動させることはまだできませんが、より高い(使われていない)インデックスにウィンドウを移動させて、前のインデックスがあった隙間に再配置することはできます
あなたは3つのウィンドウを持っていて、4つ目を追加したいと言いますが、3が以前にあった場所に
新しいウィンドウを追加する前にTmux prefix then .を押すと、move コマンドが起動します。4 と入力すると、3 のインデックスが 4 になり、その後、単に別のウィンドウを追加すると、それはインデックス 3 になり、古いウィンドウはまだインデックス 4 になります
1 mattLummus 2014-10-31
まず、tmuxコマンドプレスを開いてリリースします
Ctrl + b
そして、実際のウィンドウを右のウィンドウに変更するには(順番が回っている)、そうすればいいのです
}
実際のウィンドウを左に変更するには
{
}
や{
を押すときはSHIFT
を忘れずに
1 Jonatas Eduardo 2016-05-15
何の価値があるのか
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
特に、かなり改善されたのではないでしょうか
注意: コマンドを実行した後、別のウィンドウに移動することがあります
1 steinar 2017-09-14
コマンドラインは不要(これはCtrl+bで、その後:になる)
で窓を移動させるだけ
Ctrl + b + :
その後、新しい(無料の)ウィンドウ番号を入力し、Enterを押してください
自由なウィンドウ番号がない場合は、Ctrl + b + .を使ってウィンドウの番号を変更してください
(ヒント: どれがどれなのかわからなくなったら、Ctrl + b + ,でウィンドウの名前を付けてください)
1 rubo77 2019-09-16
ここでの答えはどれも私を満足させてくれなかったので、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
tmux move-window -t:$((maxwin + 1))
winlist=($(tmux list-windows | cut -d: -f1 | xargs))
for n in ${winlist[@]}; do
i=$((i + 1))
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[@]} # start at highest indexed window
for n in ${winlist[@]}; do
tmux move-window -s:$n -t:$i
i=$((i - 1))
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
のウィンドウの入れ替え動作を完全に真似るために、既存のウィンドウ番号にウィンドウを移動させると、そのウィンドウがその場所に移動し、他のすべてのウィンドウが右に移動するようにするべきだと思います。このスクリプトを修正するのはかなり簡単です
1 Luke Davis 2018-05-22