Movendo o painel tmux para a janela

228

Como movo um painel existente para outra janela no tmux quando tenho várias janelas e vice-versa?

Estou vindo da tela , onde posso mudar para o painel e depois mudar de janela até chegar ao que eu quero; O tmux parece não permitir isso.

mrlanrat
fonte

Respostas:

209

O comando para fazer isso está join-paneno tmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

Para simplificar isso, eu tenho esses vínculos no meu .tmux.confpara isso:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

O primeiro pega o painel da janela de destino e o une à corrente, o segundo faz o inverso.

Você pode recarregar sua sessão do tmux executando o seguinte dentro da sessão:

$ tmux source-file ~/.tmux.conf
jasonwryan
fonte
Estou tentando esse método, mas quando coloco seu código no meu arquivo .tmux.conf e faço Ctrl-b, j, nada parece acontecer.
precisa saber é o seguinte
2
Você precisa de pelo menos 2 janelas abertas, com um par de painéis em cada um: em seguida, bateu Prefix+se digite o nome da janela no prompt para enviar o painel para que a janela ...
jasonwryan
Ainda não estou tendo sorte com isso, nada acontece. Tenho a impressão de que o tmux não está lendo o arquivo .tmux.conf porque não responde de maneira alguma a Ctrl-b, j ou Ctrl-b, s. (estes são os únicos 2 linhas no arquivo de configuração)
mrlanrat
7
@rlanrat Acho que você deve prefixar o número da janela com dois pontos. Veja minha resposta abaixo.
Bruno Bronosky
1
A que se refere o '%%'?
oligofren 2/07
152

o painel de junção é a resposta. Eu também estava tendo problemas com minhas tentativas de usá-lo com base na documentação do tmux. Descobri que as opções -t e -s parecem aceitar a janela [session]: e não a janela [session:]. Ou seja, especificar a sessão é opcional, mas incluir: é obrigatório. (Estou usando o tmux 1.5)

Portanto, para adicionar um painel à janela atual e colocar a janela 1 no painel, o comando seria (Ctrl-B ou qualquer que seja sua chave de ligação, seguida por) ...

:join-pane -s :1

Você pode quebrá-los separadamente com o painel de interrupção, que por padrão é: Ctrl-B! Se você deseja vinculá-lo a um atalho, sugiro NÃO substituir um vínculo padrão como s, porque no caminho você procurará na Internet por uma resposta que envolva a escolha da sessão e ela não funcionará no seu sistema. Observe que o painel de interrupção está vinculado a! e @ está próximo a ele e não está vinculado a nada por padrão. Por esse motivo, sugiro esta ligação ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

Como alternativa, ter um seletor interativo ...

bind-key @ choose-window 'join-pane -h -s "%%"'

Como alternativa, para ingressar sempre na janela visitada mais recentemente ...

bind-key @ join-pane -h -s !

NOTA: -hIsso faz com que empilhe os painéis horizontalmente (com uma divisão vertical) em oposição ao comportamento padrão, que é o inverso.

O mais importante é que você APRENDA o que você escolher como atalho. Porque se você apenas configurá-lo e esquecê-lo, você será enganado quando se encontrar em um servidor estrangeiro. E, convenhamos, a coisa mais importante que um multiplexador de terminal oferece é sessões confiáveis ​​em servidores remotos.

Isso completa minha conversão do GNU Screen para o Tmux. Eu nunca vou olhar para trás.

Desfrutar!

Bruno Bronosky
fonte
2
Eu estava sentindo falta do ':' também ... obrigado por isso.
rascalking 20/09/12
Eu recebi 2 votos negativos recentemente, sem comentários sugerindo o porquê. Isso é cultura rude e anti-FOSS.
de Bruno Bronosky
1
documentação não fala sobre dois pontos! Um bom #
JonnyRaa
1
O uso da sintaxe de pontos foi o que me ajudou, window.panepor exemplo, join-pane -s 1.0a mover o painel 0 na janela 1 para a janela atual. Mais detalhes em maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras
A partir do tmux 2.1, :aparentemente não é mais necessário (por exemplo, apenas faça :join-pane -s 1). Talvez tenha sido um erro em versões anteriores
villapx
38

Acho que gosto mais do que tenho usado para mover os painéis para a própria janela. eu uso

break-pane -t :

Eu descobri isso através da experimentação, mas parece funcionar muito bem. Você pode keybind ou alias facilmente, sem a necessidade de scripts.

Joshua K
fonte
2
+1. Eu costumo usar isso com muito mais frequência do que join-pane.
Chris B
14

Se você não quiser digitar o identificador do painel em um prompt, também poderá usar

bind-key j "join-pane -s !"

que unirá o último painel / janela ativo à janela atual.

Bernhard T
fonte
1
Qual versão você está usando? Estou ficando unknown command: join-pane -s !com o 1.6.
Paradroid 28/08
Usando 2.0 aqui, mas apenas colocar a linha no conf sem aspas parece funcionar bem. bind-key j join-pane -s !
bkzland
13

Depois de examinar as outras respostas e ler a página de manual do tmux, decidi por enquanto as seguintes ligações:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

Isso permitirá que você selecione interativamente a janela para ingressar e espelhe minhas ligações s/ letras minúsculas vpara criar novas divisões verticais / horizontais. Se alguém souber selecionar painéis individuais em vez de janelas, avise-me.

toupeira
fonte
Isso é muito útil. Obrigado. Infelizmente, -ve -hnão criam "divisões" verticais e horizontais, respectivamente. Eles criam " painéis empilhados " verticais e horizontais, respectivamente. (Isso significa que os painéis empilhados verticalmente têm uma divisão horizontal.) Portanto, você precisa treinar seu cérebro dessa maneira. Também -vé o padrão, então eu deixaria isso de fora e só o colocaria -hlá para que você ~/.tmux.confatue como uma folha de dicas para você olhar.
de Bruno Bronosky
Eu gosto disso melhor do que as outras respostas para "oposto ao break-pane". Depois de liberar um painel em sua própria janela temporariamente, mais tarde, quero enviá-lo de volta para uma das janelas mais antigas e isso lida com isso normalmente.
Stabledog 26/07
13

Ligação de chave

Por padrão, Ctrl+ b, quebraria o painel ativo em uma nova janela e! passaria para ele.

Onde Ctrl+ bé o prefixo padrão do .

Detalhes

O tmuxcomando que essa chave executa é break-pane(alias:) breakpconforme implementado cmd-break-pane.ce vinculado como padrão em key-bindings.c, como visto na saída do comando list-keys(alias lsk:):

bind-key    -T prefix       !                 break-pane
muru
fonte
4

Você não precisa alterar suas associações de teclas.

Enquanto o painel que você deseja mover estiver focado, digite Prefixo e, :join-pane -t :1em seguida, onde 1estiver, qualquer que seja o número da janela de destino na mesma sessão. Você pode movê-lo para outra sessão, acrescentando o nome como project:3. Para mim join-pane, os preenchimentos automáticos de guias são de j.

Adicione um -hou -valterne ao comando para definir a orientação da nova divisão criada no destino ou simplesmente vá até ele e Prefixe + spacepara reorganizar.

Walf
fonte