Como você oculta um painel tmux?

60

Eu tenho 3 painéis na minha janela tmux:

--------------------------
|             |      2   |
|             |          |
|        1    |----------|
|             |      3   |
|             |          |
--------------------------

Os painéis 1 e 2 têm vim. O painel 3 executa um cli que estou desenvolvendo. Às vezes, quero comparar os painéis 1 e 2, então quero ocultar o painel 3:

--------------------------
|             |          |
|             |          |
|        1    |       2  |
|             |          |
|             |          |
--------------------------

e, em seguida, traga novamente o painel 3. Não quero matar o painel 3, pois configurei algumas coisas lá e não quero ir embora configurando-as novamente.

  • Existe algo semelhante ao PREFIX + zqual pode ampliar o painel 2, mas sem tocar no painel 1? Ou
  • Existe uma maneira de ocultar o painel 3 rapidamente e trazê-lo de volta quando necessário?
user881300
fonte

Respostas:

71

Use os comandos break-panee join-pane. Consulte man tmuxpara detalhes, opções e uso.


Ocultar painel 3:

Selecione o painel 3e insira Prefix- :break-pane -dP.

tmuxenvia o painel 3para uma janela em segundo plano (a -dbandeira) e imprime algumas informações sobre ela no painel 2 (a -Pbandeira). Por padrão, você verá algo como 1:2.0(significado session:window.pane:). Clique qpara continuar trabalhando. 1 1

1 Com alguma prática, você poderá soltar a -Pbandeira, pois é possível prever o session:window.panetrigêmeo: o sessionpadrão é a sessão atual e o panepadrão 0enquanto windowé o próximo identificador de janela livre.

Recupere o Painel 3:

Para chegar painel 3eo layout de volta, selecione painel 2e emissão Prefix- :join-pane -vs 1:2.0dizendo tmuxpara dividir painel 2vertical ( -v) e para se juntar ao (fonte) painel ( -s) com o identificador 1:2.0. Opcionalmente, você pode descartar sessiono paneidentificador ou . Observe também que o tmux armazena um histórico de linha de comando, convenientemente acessível com Prefix- :- Up.

Provavelmente, você precisará de algum tempo para entender o problema, mas, com isso, certamente poderá criar associações de teclas personalizadas que sejam convenientes para você.


Esta pergunta contém algumas informações e truques úteis que podem melhorar seu fluxo de trabalho.

user78291
fonte
Instruções claras! Funciona sem problemas para mim, muito melhor do que minha resposta!
Bernhard
Por padrão, o painel 3 será quebrado na última janela. Se você já possui 3 janelas na sessão atual, o painel se tornará a Janela 3 (suponha que a janela inicie em 0); portanto, o 3 em "Janela 3" depende do Nas janelas abertas, como posso fazer isso funcionar em ligações de teclas personalizadas?
CodyChan
5

Uma ideia: execute o tmux no tmux.

Configuração original:

Painel 1 e Painel 2; lado a lado. Execute o vim no Painel 1 normalmente.

No painel 2, execute o tmux novamente e crie dois painéis (um por cima do outro dessa vez). Em seguida, execute o vim no painel 2.1 e sua CLI no painel 2.2. Isso deve permitir que você acesse o painel 2.1 em tela cheia com sua segunda instância do Vim, resultando no comportamento desejado.

BinaryBen
fonte
é isso que eu chamo de pensar fora da caixa!
user881300
Obrigado user881300. Ele tem algumas falhas (poder enviar comandos tem algumas peculiaridades, por exemplo). Espero atualizar isso para uma resposta mais completa depois de testá-lo - preciso de funcionalidades semelhantes.
BinaryBen
2
@ user881300 Tecnicamente, esta é a caixa na caixa de pensamento.
Mateen Ulhaq
3

Em vez de ocultar o painel 3, você também pode trapacear um pouco e torná-lo muito pequeno, o que provavelmente também funcionará no seu caso.

Quando o painel 2 é o painel ativo, você pode

PREFIX : resize-pane -D 40

Em seguida, para subir novamente, você pode

PREFIX : resize-pane -D 28

onde você teria que substituir 28 por um número decente ou, em vez disso, poderia tentar PREFIXEsc4, o que redimensiona automaticamente.

Bernhard
fonte
Eu estava redimensionando o painel usando, set -g mouse-resize-pane onmas, além do redimensionamento, temos outra opção?
user881300
@ user881300 Não sou tmuxespecialista de forma alguma, mas gostaria de saber se isso é possível.
Bernhard
1
CTRL+B, ALT+<arrow direction to resize>, que CTRL+B, ESC, 4(thx @Bernhard) para restaurá-lo.
FelikZ 30/08/2015
1

Agora, essa pergunta tem quase 5 anos, mas eu a encontrei porque queria fazer algo semelhante e criei as seguintes combinações de teclas, graças à resposta do usuário78291 :

bind-key ! break-pane -d -n _hidden_pane
bind-key @ join-pane -s $.1

Dessa forma, eu posso usar Prefix!para ocultar o painel atual e Prefix@trazê-lo de volta. A parte boa é que eu posso ocultar vários painéis dessa maneira.

Está longe de ser perfeito, mas serve para ocultar painéis e trazê-los de volta muito bem.

Filipe Kiss
fonte
0

Eu sei que isso realmente não oculta o painel em que você está trabalhando, mas estava tentando fazer isso para impedir que o tmux envie comandos comuns para as janelas selecionadas e cheguei a uma solução muito mais simples.

Se você não deseja ocultar visualmente o painel, mas apenas deseja interromper qualquer entrada que vá para o painel. Um cenário pode ser o de que você deseja enviar um comando para 5 painéis abertos, mas não deseja enviá-lo para 2 deles.

Nesse caso de uso, você pode fazer ctrl + snos painéis que você não deseja que os comandos acessem ( ctrl + sbloqueia todas as entradas no painel).

Quando terminar, pressione ctrl + cpara voltar.

Nota : Não pressione ctrl + qapós os comandos, pois ele executará todos os comandos nessa tela. ctrl + cnão fará isso (tentei isso no Ubuntu).

Fake Jon Skeet
fonte