Carregue o terminal de outra janela no painel dividido atual no tmux

Carregue o terminal de outra janela no painel dividido atual no tmux

Na tela GNU, posso mudar para qualquer número de janela dentro de uma determinada divisão. Por exemplo:

  • Entre screenpara iniciá-lo.
  • Pressione Ctrl+ a cpara criar uma nova janela. Agora existem duas janelas: janela 0 e janela 1. A janela atual agora é a janela 1.
  • Pressione Ctrl+ a Shift+ spara criar uma nova divisão.
  • Pressione Ctrl+ a Tabpara ir para a nova divisão.
  • Pressione Ctrl+ 0para carregar a janela 0 nesta nova divisão.

Como podemos fazer algo semelhante no Tmux? Isto é o que tenho até agora:

  • Entre tmuxpara iniciá-lo.
  • Pressione Ctrl+ b cpara criar uma nova janela. Existem duas janelas agora: janela 0 e janela 1. A janela atual é a janela 1.
  • Pressione Ctrl+ b "para criar um novo painel dividido. O painel atual agora é o novo painel dividido.
  • Como posso agora carregar o shell da janela 0 neste novo painel dividido?

Existe uma maneira de simular esse comportamento da tela no tmux?

Responder1

O Tmux não oferece suporte à exibição do mesmo painel em duas janelas diferentes nem à exibição do mesmo painel duas vezes na mesma janela. Você pode vincular uma janela inteira a uma sessão sem desvinculá-la da sessão original. Ou você pode colocar um painel em outra janela, mas isso removerá o painel da janela original.

No seu exemplo, você já criou um painel que ocupa o lugar do painel desejado. Neste caso você pode trocar os dois painéis com swap-paneo comando tmux. De man 1 tmux:

swap-pane [-dDU] [-s src-pane] [-t dst-pane]
(alias swapp:)

Troque dois painéis. […] -dinstrui o tmux a não alterar o painel ativo.

Se -sfor omitido e um painel marcado estiver presente (consulte select-pane -m), o painel marcado será usado em vez do painel atual.

É ainda melhor: se -se -tforem omitidos e um painel marcado estiver presente, o painel marcado e o painel atual serão trocados. A qualquer momento, pode haver no máximo um painel marcado em todo o servidor tmux.

Como posso agora carregar o shell da janela 0 neste novo painel dividido?

Navegue até a janela 0 e marque o painel que deseja mover (no seu exemplo, é o único painel). Você faz isso com RMB (se o mouse for compatível) ou prefix m(onde o padrão prefixé Ctrl+ b). Navegue de volta para o novo painel e invoque:

tmux swapp

O shell onde você invoca tmux swappnão é destruído automaticamente, agora está na janela 0 onde costumava estar o painel marcado. No seu exemplo, parece que você não precisa desse shell em si, apenas do novo painel; em caso afirmativo, considere tmux swapp && exitem vez disso. Tenha em mente que se não houver nenhum painel marcado (ou se o atual estiver marcado), tmux swappefetivamente não fará nada. Nesse caso, tmux swapp && exitapenas sairá do shell.

Alternativamente,em vez deAo criar um novo painel dividido, você pode mover o painel desejado para a janela atual em uma única etapa.

join-pane [-bdhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
(alias joinp:)

Como split-window, mas em vez de dividir dst-panee criar um novo painel, divida-o e mova-se src-panepara o espaço. […]

Se -sfor omitido e um painel marcado estiver presente (consulte select-pane -m), o painel marcado será usado em vez do painel atual.

Então, em vez de prefix ":

  1. Marque o painel que você deseja mover.
  2. Divida o painel que você deseja dividir:

    • seja com tmux joinp -vinvocado no shell lá;
    • ou com prefix : joinp -v Enter; em particular, isso é útil quando não há nenhum shell inativo no painel que você deseja dividir (mas não se esqueça de tornar o painel atual primeiro).

O método with prefix :pode ser usado para invocar swappqualquer outro comando tmux.

Abaixo estão algumas notas sobre a manipulação de painéis fora do tmux. Os exemplos usam, tmux swappmas você pode invocar tmux joinpde forma semelhante.


swap-panepermite que você troquequalquerdois painéis dentro de um servidor tmux. Você pode correr tmux swappaté mesmo doforado tmux, sem marcar e alterar manualmente os painéis, se você souber como endereçar os dois painéis que deseja trocar. Pode ser:

tmux swapp -s 0:1.1 -t 0:0.0

O formato é session:window.pane, veja o manual onde explica target-pane. Observe que esses números simples são "relativos" (pelo menos a :window.paneparte, não tenho certeza sobre o sessionnúmero). O primeiro painel 0:0.0após a troca 0:1.1torna-se 0:1.1. Por outro lado, sessões tmux, janelas e painéis têm seusexclusivoidentificadores (prefixados com $e @respectivamente %). No seu caso o comando pode ser assim:

tmux swapp -s %2 -t %0

Mas observe se o painel antigo estava realmente %0ativado 0:0.0e o novo estava %2ativado 0:1.1, então eles estão agora %0em 0:1.1e %2em 0:0.0respectivamente. O identificador exclusivo de cada painel é “anexado” ao conteúdo (processo) do painel e “viaja” com ele. Os identificadores de painéis não prefixados dependem do número total de painéis e de seu posicionamento na janela.

Você pode nomear sessões ( rename-session) e janelas ( rename-window). Isso facilita a identificação dos painéis session:window.pane.


Você pode executar mais de um servidor tmux. Os servidores são identificados com seus caminhos de soquete ( -Lopção) ou nomes de soquete ( -S). O nome padrão é default. Se você invocar tmuxsem essas opções no tmux, ele encontrará o servidor correto (por meio da TMUXvariável de ambiente, eu acho). Se você invocar tmuxsem essas opções de fora do tmux, será como tmux -S default. Você pode querer trocar dois painéis que pertencem a um servidor tmux não padrão, por exemplo:

tmux -S other swapp -s 0:1.1 -t 0:0.0

O Tmux não oferece suporte à troca de painéis entre servidores. O objetivo de ter dois servidores é que eles são separados. Se você precisar trocar painéis entre duas entidades semi-separadas do tmux, essas entidades deverão ser sessões dentro de um único servidor tmux. Você pode trocar painéis entre diferentes sessões.

Se você realmente precisa "sequestrar" um processo em execução em outro servidor tmux, usereptyr. A ferramenta é totalmente independente do tmux.

informação relacionada