Questão Como faço para reordenar o windows tmux?


Dentro screenEu posso digitar C-a :number 0 para mover uma janela para o topo da lista de janelas e empurrar todas as outras janelas para baixo. Qual é a seqüência de comando equivalente para tmux? Eu olhei para a página man, mas estou achando confuso neste ponto.


357


origem


C-b, . permite que você renumere uma janela. - isomorphismes
Lendo todas as respostas, ainda não vejo uma solução fácil para a pergunta do OP: como mover uma determinada janela para a posição 0 e deslocar todo o resto para a direita. Eu realmente tenho que mudar manualmente cada um para fazer isso? Eu só quero desfazer uma jogada que fiz por engano (e não tenho certeza de que) que eu movi a janela 0 para a janela 8 e mudei todas as outras para a esquerda. - nealmcb
@nealmcb O mais fácil que eu poderia criar é definir o índice base como 1, renumerar e depois mover sua janela para o slot 0 vazio: superuser.com/a/1155999/674549 - eMBee
Por diferença de swap-window -s number e swap-window -t number para trocar a janela atual, veja minha resposta aqui. - qeatzy
Vejo esta resposta para uma função bash para alterar o intervalo de janelas tmux, por exemplo, [2-5] de [0-6] janelas. - qeatzy


Respostas:


o swap-window O comando está mais próximo do que você deseja.

"Prefixo:" (isto é, "Ctrl-B:" por padrão) leva você ao prompt do comando tmux. Lá você entra:

swap-window -s 3 -t 1

deixar a janela número 3 e a janela número 1 trocarem suas posições.

Para trocar a janela atual com a janela superior, faça:

swap-window -t 0

No caso improvável de não ter nenhuma janela no índice 0, faça:

move-window -t 0

(se base-index for 0, como é por padrão).

Você pode vincular esse comando a uma chave (T para "top" por exemplo) adicionando o seguinte ao seu ~/.tmux.conf:

bind-key T swap-window -t 0

397



Obrigado pela sua edição, mas move-window só funciona, se não houver outra janela no índice fornecido. Então, na maioria dos casos, move-window -t 0 não funcionará, já que normalmente haverá outra janela nessa posição. - matlehmann
Isso mesmo, vou melhorar isso. - zakkak
Você pode querer dar uma olhada movew. - Marcello Romani
Além disso, bind-key L swap-window -t -1 para torná-lo a última janela. - w17t
Por diferença de swapw -s number e swapw -t number para trocar a janela atual, veja minha resposta aqui. - qeatzy


Adicionando a resposta de Gareth, você pode usar as seguintes chaves

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

Pressionando Ctrl + Shift + Left (moverá a janela atual para a esquerda. Da mesma forma, à direita. Não é necessário usar o modificador (C-b).


210



este -1 e +1 A sintaxe ajuda a resolver o problema dos índices ocupados. O tmux deslocará as outras janelas para você e o evento finalizará ao final / início automaticamente. Esta é a melhor resposta. - brianpeiris
Isso é piedoso! Obrigado. - Bruno Buccolo
Minha incapacidade de mover facilmente o windows tmux tem me incomodado por algumas semanas. Isso torna muito mais fácil lidar com as janelas! Muito obrigado por este recente tmux converter. - calvinf
Ótima dica, prefira bind-key S-Left swap-window -t -1, então eu posso fazer <prefixo> shift + seta, como eu não gosto de estragar as ligações de programas. - demure
Se estiver usando letras, você precisa usar uma letra maiúscula e não C-S, assim: bind-key -n C-H swap-window -t -1 - Matthew Mitchell


O tmux equivalente a :number 42 é :move-window -t 42.


60



Isso está ligado a C-b. - vedang
Obrigado! Isso é muito melhor do que a resposta aceita. - Ashe
@ArlenCuss De fato, ambas as respostas são boas e úteis. Você vê, usando screen: number você pode trocar janelas, usando a janela move do tmux: você só pode realocar a janela se o índice de destino não estiver em uso. Então, imo, ambos: swap-window e: move-window são necessários para entender o controle dos locais das janelas :) - Victor Farazdagi
+1 para obter uma resposta de um guru de programação (também para estar correto). Esta é a única maneira que eu poderia fazê-lo funcionar em uma janela ativa - engineerDave
tmux :move-window é não equivalente a tela :number. :number troca se o destino existir, :move-window falhar nesse caso. Você tem que escolher entre :move-window e :swap-window - piec


Você pode implementar um equivalente a screen's number comando usando um script de shell externo que escolhe entre swap-window e move-window. Você pode vinculá-lo a uma chave dessa maneira:

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

12



Muito boa solução, trabalhando muito bem! Acabei de fazer pequenas edições para limpar e remover o -F opção que não é aceita pela minha versão do tmux. - haridsv


Eu renumerar janelas como esta:

Ctrl+b, ., 222

faria a corrente tmux janela (todos os painéis) número 222.


Relacionado: quando estou embaralhando as coisas, eu tento querer fazer

Ctrl+b  :new-session -d -s "reading"

e de lá eu também posso usar Ctrl+b, ., reading para mover a janela atual (todos os painéis de uma só vez) para a sessão de leitura. Você pode navegar entre as sessões com Ctrl+b, s a maneira de navegar na sessão usando Ctrl+b, w.

HTH


10





Usando a janela de troca para mover para qualquer id: [mais próximo da tela: number]

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

[m para mover -> pressione o prefixo-m e digite digamos 3. .para renumerar a janela para 3]


8



Isso já é bom, mas melhor ainda seria: trocar de janela e, se falhar, voltar para a janela de movimento - nisc


Já que a resposta de Ashish Ariga não funciona na versão 1.9a e abaixo. eu uso < e > para trocar a janela para esquerda e direita, respectivamente, adicionando a linha abaixo .tmux.conf.

# swap window to left or right
bind-key -r < swap-window -t -1
bind-key -r > swap-window -t +1

5





Para aqueles de vocês que usam byobu como seu wrapper para o tmux, você pode trocar a janela atual com a janela anterior ou seguinte com:

Ctrl-Shift-F3
Ctrl-Shift-F4

A ligação de chave definida por byobu para estas chaves podem ser de interesse:

bind-key -n    C-S-F3 swap-window -t :-1
bind-key -n    C-S-F4 swap-window -t :+1

3



Seria ótimo um atalho para se movimentar em divisões dentro uma certa janela. - Pablo Bianchi


A abordagem que eu uso combina um pouco da resposta de Ashish com piec; Eu tenho a seta para a esquerda e para a direita ligada a um pequeno texto explicativo que move a janela uma para a esquerda ou para a direita, a menos que seja a primeira ou a última janela, respeitosamente. Eu fiz isso porque, quando você emite um swap +1 na última janela (ou troca -1 na primeira janela), ele ainda irá trocar, em vez de voltar ao normal novamente como você poderia esperar:

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

Torna-se

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

Ao invés de

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

Então, os comandos que uso param de funcionar quando a janela atinge a borda da lista:

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'

Isso pode ser facilmente combinado com índice base e renumerar janelas para ter uma lista de janelas que começam em um número arbitrário e nunca tem lacunas.

Se você estiver usando índice base 1 como eu e você não acha que você vai ficar acima de 999 janelas, você pode usar um pequeno truque para fazê-lo rodar corretamente, embora os comandos inchem um pouco:

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'

Isso funciona movendo temporariamente a última janela para o índice 0 não utilizado e, em seguida, chamando mova-janela -r renumerá-los a partir de 1 novamente. Ele funciona de maneira semelhante ao mover a primeira janela até o fim; escolhendo um número enorme que você nunca vai usar, garante que quando mova-janela -r dispara novamente tudo será numerado como você esperaria. Se você está se perguntando sobre refresh-client -S, isso é necessário porque às vezes, enquanto a reordenação de mover-janela funcionará corretamente, a barra de status não será atualizada até que mais alterações sejam feitas. Ao forçar uma atualização apenas da barra de status (-S), você evita isso.

O único problema que posso encontrar com essa abordagem é que janela de troca irá implicitamente alterar a última janela usada para a que você trocou. Assim, se você estiver na janela # 1, mude para a janela quatro e mova-a de volta, você verá que sua última janela usada é a nova # 4 (anteriormente # 3) em vez de # 1. Não parece haver uma maneira de contornar isso.


2





Solução mais simples de man, é usar as ligações padrão:

{           Swap the current pane with the previous pane.
}           Swap the current pane with the next pane.

1



Janelas e painéis tmux são diferentes. - Marcello Romani
Isso ainda me ajudou a conseguir o que eu queria - lkraav
Esta questão é sobre janelas e não painéis - mbigras