在 中screen,我只需键入C-a :number 0即可将窗口移动到窗口列表的顶部并将所有其他窗口向下推。的等效命令序列是tmux什么?我查看了手册页,但在这一点上我发现它令人困惑。
mat*_*ann 600
该swap-window命令最接近您想要的。
“前缀:”(即Ctrl+ B,:默认情况下)为您带来的TMUX-命令提示符。在那里你输入:
swap-window -s 3 -t 1
Run Code Online (Sandbox Code Playgroud)
让 3 号窗口和 1 号窗口交换位置。
要将当前窗口与顶部窗口交换,请执行以下操作:
swap-window -t 0
Run Code Online (Sandbox Code Playgroud)
在索引 0 处没有窗口的不太可能的情况下,请执行以下操作:
move-window -t 0
Run Code Online (Sandbox Code Playgroud)
(如果 base-index 为 0,默认情况下)。命令move-window -t <NUMBER>默认绑定到Ctrl+ B, .。
您可以通过将以下内容添加到您的~/.tmux.conf:
bind-key T swap-window -t 0
Run Code Online (Sandbox Code Playgroud)
小智 340
添加到 Gareth 的答案,您可以使用以下键绑定
bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1
Run Code Online (Sandbox Code Playgroud)
按Ctrl+Shift+Left(将当前窗口向左移动。同样向右。不需要使用修饰符(Cb)。
对于 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
Run Code Online (Sandbox Code Playgroud)
Ran*_*rtz 77
相当于TMUX:number 42是:move-window -t 42。
iso*_*mes 23
我像这样重新编号窗口:
Ctrl+ b, .,222
将使当前tmux窗口(所有窗格)编号为 222。
相关地:当我在四处闲逛时,我往往想做
Ctrl+b :new-session -d -s "reading"
从那里我还可以使用Ctrl+ b, .,reading将当前窗口(一次所有窗格)移动到阅读会话。您可以使用Ctrl+在会话之间浏览b,s就像您在会话中使用Ctrl+ b、浏览一样w。
HTH
pie*_*iec 13
您可以使用在和之间进行选择的外部 shell 脚本来实现等效于screen的number命令。您可以通过这种方式将其绑定到一个键:swap-windowmove-window
bind < command-prompt -p index "run-shell '~/.tmux.number.sh %%'"
Run Code Online (Sandbox Code Playgroud)
~/.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
Run Code Online (Sandbox Code Playgroud)
小智 9
使用交换窗口移动到任何 id: [最接近屏幕的 :number]
# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:" "swap-window -t '%%'"
Run Code Online (Sandbox Code Playgroud)
[m 表示移动 --> 打前缀-m 并输入 say 3 。.将窗口重新编号为 3]
小智 9
由于 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
Run Code Online (Sandbox Code Playgroud)
小智 7
最简单的解决方案man是使用默认绑定:
{ Swap the current pane with the previous pane.
} Swap the current pane with the next pane.
Run Code Online (Sandbox Code Playgroud)
为了理智和简单的窗口交换:
# Bind P and N (capitals) to moving the current window around.
bind-key N swap-window -t +1 \; next-window
bind-key P swap-window -t -1 \; previous-window
Run Code Online (Sandbox Code Playgroud)
\;您可以将两个命令组合到一个键绑定中。因此,我们首先交换窗口,然后将焦点移动到该(原始)窗口。
因此,当您这样做时prefix -> Shift + N,它将当前窗口向前移动一位,并将焦点保持在该窗口上。
我很困惑为什么 tmux 中没有直接的命令。为什么你想要更复杂的东西?无论如何,这解决了。它。
我使用的方法结合了 Ashish 的一些答案和 Piec 的答案;我将 alt-left 和 right 箭头绑定到一个快速的小 shell 标注,该标注将窗口向左或向右移动,除非它是第一个或最后一个窗口。我这样做是因为,当您在最后一个窗口发出交换+1(或在第一个窗口发出交换-1)时,它仍然会交换,而不是像您期望的那样再次循环:
0:one 1:two 2:three 3:zero*
Run Code Online (Sandbox Code Playgroud)
成为
0:zero* 1:two 2:three 3:one
Run Code Online (Sandbox Code Playgroud)
代替
0:zero* 1:one 2:two 3:three
Run Code Online (Sandbox Code Playgroud)
因此,当窗口到达列表边缘时,我使用的命令停止工作:
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -d -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -d -t +1'
Run Code Online (Sandbox Code Playgroud)
这可以很容易地与基索引和重新编号窗口结合使用,以获得以任意编号开始且没有任何间隙的窗口列表。
如果你像我一样使用基本索引 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 -d -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 -d -t +1 ; fi'
Run Code Online (Sandbox Code Playgroud)
其工作原理是暂时将最后一个窗口移动到未使用的索引 0,然后调用move-window -r再次从 1 开始重新编号。将第一个窗口移动到末尾时,其工作原理类似;通过选择一个您永远不会使用的巨大数字,它可以确保当move-window -r再次触发时,所有内容都会按照您的预期进行编号。如果您想知道刷新客户端 -S ,这是必要的,因为有时,虽然移动窗口的重新排序可以正常工作,但状态栏不会更新,直到进行进一步的更改。通过强制刷新状态栏 (-S),可以避免这种情况。
我发现这种方法的唯一问题是交换窗口会隐式地将上次使用的窗口更改为您交换的窗口。因此,如果您位于窗口#1,切换到窗口四并将其移回窗口一,您会发现上次使用的窗口是新的#4(以前是#3)而不是#1。似乎没有办法解决这个问题。
2020 年编辑:最近的 tmux 版本需要-d保留移动当前窗口并将其保留在新位置的旧行为。
小智 5
对于那些byobu用作 tmux 包装器的人,您可以将当前窗口与上一个或下一个窗口交换:
Ctrl-Shift-F3
Ctrl-Shift-F4
Run Code Online (Sandbox Code Playgroud)
byobu为这些键定义的键绑定可能很有趣:
bind-key -n C-S-F3 swap-window -t :-1
bind-key -n C-S-F4 swap-window -t :+1
Run Code Online (Sandbox Code Playgroud)
我很惊讶没有人发现这一点,但是在深入研究 tmux 手册页后,您可以使用
move-window -b -t <target-window>
Run Code Online (Sandbox Code Playgroud)
移动到当前窗口到目标窗口之前。
因此,要完全按照OP的要求,执行以下操作:
move-window -b -t 0
Run Code Online (Sandbox Code Playgroud)