espelhando um painel entre duas janelas

14

É possível que o mesmo painel apareça em duas janelas diferentes de uma única sessão do tmux?

Normalmente, tenho uma única divisão horizontal na minha janela principal com o vim no painel superior (cerca de 80-90% da altura do terminal) e uma linha de comando no painel inferior onde executo o programa em que estou trabalhando. Como a janela inferior é muito pequena, muitas vezes não consigo ver a saída de erro, e usar os atalhos de teclado do tmux para rolar para trás está ficando cansativo. Gostaria de ter minha segunda janela anexada ao mesmo painel para que, se eu precisar ver mais da minha saída de erro, eu possa alternar rapidamente para a segunda janela sem precisar lidar com a rolagem. Isso é possível?

(Eu acho que um substituto seria usar algo como tee para escrever stdout em um arquivo de log e segui-lo na minha segunda janela. Espero que isso não seja necessário)

Will Norris
fonte

Respostas:

7

Por padrão, você pode alternar o "estado de zoom" de um painel pressionando Prefixe z(o prefixo padrão é Ctrl+B).

Isso fará com que o painel atual (seu painel de linha de comando, por exemplo) ocupe a janela inteira. Pressione Prefixe znovamente para "descompactar" o painel.

Kusalananda
fonte
10

Receio que essa seja uma das coisas com as quais você não pode fazer tmux(eu esperaria que os problemas com um painel sendo exibido em vários espaços de tamanhos diferentes sejam a principal razão). No entanto, existem várias maneiras de contornar isso - todas baseadas na vinculação de determinadas ações a algumas combinações de teclas. Desde muito depende o layout que você está usando, tendo apenas um layout simples com dois painéis que você está mencionando está a fazer a sua vida muito mais fácil

  1. rotate-window - apenas trocará os painéis, dando a você 80% -90% para a saída do comando (e a pequena janela para o ViM).

  2. break-pane vs. join-pane -v -p <preview_percentage> -t !

  3. pipe-panecom commandsendo o redirecionamento sem buffer para um pipe nomeado (ou seja, um nó do sistema de arquivos criados com mkfifo) - e então usar tail -fque pipe nomeado no outro painel.

  4. canalize a saída para less, que também possui o seguinte modo que tailpossui (pelo menos o GNU).

  5. resize-pane -Zno painel menor, o zoom será ampliado no terminal completo. A redução do zoom subsequente o manterá ativo, portanto, é necessário um pouco de truque para fazê-lo funcionar confortavelmente.

peterph
fonte
2
BTW - "Eu esperaria que os problemas com um painel sendo exibido em vários espaços de tamanhos diferentes sejam a principal razão" Isso pode ser um fator na complexidade de implementá-lo, mas o tmux suporta a mesma coisa no nível da janela, via agrupado sessões unix.stackexchange.com/questions/24274/… . Simplesmente adiciona preenchimento abaixo à janela menor. Teoricamente, o espelhamento de painel poderia ser feito da mesma maneira.
mahemoff
Hum ... você está certo, isso poderia ser uma maneira de fazer isso.
Peterph
1

Você pode usar um script para gerar sua pseudo-sessão em um arquivo e depois tailem uma segunda janela.

No seu painel de trabalho.

script -f tailme.out

E no seu painel de visualização.

tail -f tailme.out
slimisjim
fonte
1

Concordo com os outros que, para o seu caso, Prefix+ zseria a solução mais direta, mas para a questão geral de espelhar um painel, há um pouco de truque que poderia funcionar - aninhando uma sessão de tela no tmux.

Instale a tela gnu e inicie-a no painel que você deseja espelhar. Em seguida, screen -xprenda em outros painéis.

Você também pode aninhar outra sessão do tmux no painel, se desejar, mas as sessões do tmux devem ser aninhadas com cuidado.

Mateus
fonte