screen
では、C-a :number 0
と入力してウィンドウをウィンドウリストの一番上に移動し、他のすべてのウィンドウを1つ下にプッシュできます。 tmux
と同等のコマンドシーケンスは何ですか?私はmanページを見ました、しかし私はそれがこの点で混乱しているのを見つけます。
swap-window
コマンドは、あなたが望むものに最も近いものです。
"Prefix:"(デフォルトでは "Ctrl-B:")は、tmux-command Promptを表示します。そこに入ります:
swap-window -s 3 -t 1
ウィンドウ番号3とウィンドウ番号1の位置を入れ替えます。
現在のウィンドウをトップウィンドウと交換するには、次のようにします。
swap-window -t 0
めったにありませんがインデックス0にウィンドウがない場合は、次のようにします。
move-window -t 0
(base-indexがデフォルトの0の場合).
あなたの~/.tmux.conf
に以下を追加することで、そのコマンドをキー(例えば "top"のためのT)に結び付けることができます:
bind-key T swap-window -t 0
Garethの答えに加えて、あなたは以下のキー割り当てを使うことができます
bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1
Ctrl + Shift +左(現在のウィンドウを左に移動します。同様に右に移動します。修飾子(C-b)を使用する必要はありません。
:number 42
と同等のtmuxは:move-window -t 42
です。
swap-window
とmove-window
から選択する外部シェルスクリプトを使用して、screen
のnumber
コマンドと同等のものを実装できます。そのようにキーにバインドすることができます。
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
私はこのようにウィンドウの番号を付け直す:
Ctrl+b、.
、222
現在のtmux
name__ウィンドウ(すべてのペイン)の番号を222にします。
関連したこと:私が周りのものをシャッフルしているとき、私はやりたい傾向がある
Ctrl+b :new-session -d -s "reading"
そしてそこから私も使用することができます Ctrl+b、.
、reading
name__は、現在のウィンドウ(一度にすべてのペイン)を読み取りセッションに移動します。あなたはセッション間で閲覧することができます Ctrl+b、s
name__を使ってセッション内をブラウズする方法 Ctrl+bw
name__。
HTH
Swap-windowを使って任意のidに移動する:[screen's:numberに最も近い]
# window movement / renumbering like in screen's :number
bind-key m command-Prompt -p "move window to:" "swap-window -t '%%'"
[移動のためのm - >プレフィックス-mを押して、say 3と入力してください。 。ウィンドウの番号を3に変更する]
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
man
からの最も簡単な解決策は、デフォルトの束縛を使うことです:
{ Swap the current pane with the previous pane.
} Swap the current pane with the next pane.
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
あなたはあなたのウィンドウの開始番号を変更するためにbase-index
を使うことができます。 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
を0
にリセットできます。
私が使うアプローチは、Ashishの答えとpiecの答えを少し組み合わせたものです。最初と最後のウィンドウである場合を除き、左と右の矢印を使って、ウィンドウを左または右に1つずつ移動させます。これは、最後のウィンドウでスワップ+1を発行すると(または最初のウィンドウでスワップ-1を発行すると)、予想どおりにループバックするのではなく、スワップが行われるためです。
0:one 1:two 2:three 3:zero*
になる
0:zero* 1:two 2:three 3:one
の代わりに
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から始まる番号を付け直すことによって機能します。最初のウィンドウを最後まで移動したときも同様に機能します。あなたが決して使わないであろう大きな数を選ぶことによって、それはmove-window -rが再び起動するとき、あなたが期待するようにすべてが番号付けされることを確実にします。あなたがrefresh-client -Sについて疑問に思っているなら、からの並べ替えが移動している間に時々、それは必要です - ウィンドウは正常に動作しますが、ステータスバーはさらなる変更が行われるまで更新されません。ステータスバー(-S)だけを強制的に更新することで、これを回避できます。
私がこのアプローチで見つけることができる唯一の問題は、swap-windowが最後に使われたウィンドウをあなたが交換したものに暗黙のうちに変更するということです。したがって、ウィンドウ#1にいる場合、ウィンドウ4に切り替えて1つ戻すと、最後に使用したウィンドウは#1ではなく新しい#4(以前の#3)になります。これを回避する方法はないようです。
tmux-pain-control はフォーカスされたウィンドウを左右に移動するためのctrl-b >
とctrl-b <
を提供します。
Tmuxウィンドウから、ウィンドウ0を1と交換するために次のことを試してください。
$ tmux swap-window -d -s 0 -t 1
swap-window -s 5
とswap-window -t 5
はどちらも現在のウィンドウをウィンドウ5と入れ替えますが、意味は異なります。
swap-window -s 5
swap-window -t 5
swap-window -s number
と-t number
のnumber
は、両方とも絶対値、たとえば5、および相対値、たとえば-1、+ 2です。
P.S以下のは、swap-window -s 5
の効果を示すtmux statuslineの抜粋です。
最近:[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
ここでの答えのどれも私を満足させなかったので、私は(一種の)screen
のためのtmux
ウィンドウ移動動作を模倣するスクリプトを書きました。
宛先ウィンドウ番号がsmallで最小のウィンドウ番号かより大きいが最大のウィンドウ番号より大きいかどうかを検出します。右または左(それぞれ)に移動し、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'"
Note:screen
ウィンドウ交換の振る舞いを完全に模倣するには、ウィンドウをexistingウィンドウ番号に移動すると、そのウィンドウの場所とすべてのウィンドウに移動するはずです。他のウィンドウはrightに移動します。このスクリプトを修正するのはかなり簡単です。
新しいキーの組み合わせを 'choose-window'コマンドにバインドしたいと思います。
私はあなたがmanページをすでに読んだと言ったことを知っています、しかしあなたはそれを再び参照するべきです。 bind-keyコマンドを追加するために〜/ .tmux.confファイルを修正する必要があります。
詳しくは、下記の4ページをご覧ください。
これが私が使っている方法です。それでもウィンドウを占有されているインデックスに移動することはできませんが、ウィンドウをより高い(未使用のインデックス)に移動して、前のインデックスがあったギャップに再配置することはできます。
3つのウィンドウがあり、4つ目を追加したいが3つ前のウィンドウに追加したいとします。
新しいウィンドウを追加する前に、Tmuxプレフィックスを入力してください。移動コマンドを開きます。 4と入力すると、3のインデックスは4になります。次に別のウィンドウを追加すると、インデックス3にあり、古いウィンドウはまだインデックス4にあります。
まず、tmuxコマンドを押して放します。
Ctrl + b
そして、実際のウィンドウを正しいウィンドウに(順番に)変更するには、次のようにします。
}
実際のウィンドウを左に変更するには
{
}
または{
を押すときはSHIFT
を使うことを忘れないでください。それは価値があるもののために:
"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:コマンド実行後、別のウィンドウに移動することがあります。