DEV Community

Cover image for TMUX
Leandro Gonçalves de Oliveira
Leandro Gonçalves de Oliveira

Posted on • Updated on

TMUX

O que é tmux?

O tmux é um multiplexador de terminal. No dicionário Michaelis, temos o seguinte significado para o verbo multiplexar:

Combinar várias mensagens em um mesmo meio de transmissão.

Um multiplexador de terminal permite que a gente "rode vários terminais dentro de um mesmo terminal", e isso é muito útil!

Como instalar o tmux?

Para quem usa Linux, ele pode ser facilmente instalado com qualquer gerenciador de pacotes, basta um apt-get install tmux, yum install tmux, pacman -S tmux ou um brew install tmux no macOS.

Dica: instale o tmux e acompanhe os exemplos!

Como rodar o tmux?

Antes de rodar o tmux, é importante conhecer alguns conceitos fundamentais:

  1. o tmux pode ter várias sessões;
  2. cada sessão pode ter várias janelas;
  3. cada janela pode ter vários painéis;

Como iniciar uma sessão?

Isso pode ser feito através do comando:

tmux new -s sess-01
Enter fullscreen mode Exit fullscreen mode

Image description

No caso, estamos conectados na sessão sess-01 e estamos vendo a janela 0:zsh, ou seja, a janela do índice 0 que tem o nome zsh. Sabemos isso por causa da barra inferior verde. Também estamos vendo o painel padrão, mas vamos deixar isso para depois!

Caso a gente rode um nodejs, o nome da janela vai mudar para node:

Image description

Como dar um nome fixo para a janela?

Podemos fazer isso digitando um comando, mas é muito útil conhecer alguns atalhos, que são feitos através de combinações de teclas. A combinação para trocar o nome da sessão começa apertando Ctrl + b, soltando essas teclas e apertando , na sequência.

Image description

Podemos agora digitar o nome da janela, como janela-01, e dar um Enter.

Image description

A essa combinação, vamos resumi-la como C-b ,.

Como criar uma nova janela?

Podemos usar a combinação C-b c de create. No caso, usamos essa combinação quatro vezes para criar quatro novas janelas:

Image description

Repare que estamos na janela 4:zsh* e sabemos isso por causa do asterisco (*) na barra verde!

Como ir para a janela anterior?

Podemos usar a combinação C-b p de previous:

Image description

Como ir para a próxima janela?

Podemos usar a combinação C-b n de next:

Image description

Como ir para a primeira janela, aquela que alteramos o nome?

Podemos usar a combinação C-b 0, pois 0 é o índice da primeira janela:

Image description

Para ir para a janela de índice 2, C-b 2:

Image description

Sempre devemos ficar de olho na barra verde para nos localizarmos dentro do tmux!

Como criar um novo painel?

Caso a gente queira ter dois painéis um do lado do outro, podemos usar a combinação C-b %, que é um pouco esquisito, mas saiba que é possível customizar as combinações!

Image description

Para ir para o painel da esquerda, podemos usar C-b Left, que é a setinha da esquerda:

Image description

Podemos usar as setinhas para navegar entre os painéis! Agora para encerrar o painel em foco, C-d:

Image description

E para criar um painel embaixo do outro, C-b ":

Image description

Como ter uma visão geral das janelas?

Eu gosto muito desse, é o C-b w de windows:

Image description

Podemos usar as setinhas para andar pelas janelas e ver o que está rodando em cada uma!

Como sair do tmux?

Caso a gente queira sair, mas sem fechar nada, podemos usar C-b d de detach:

Image description

Para se reconectar na sessão sess-01, podemos usar o comando:

tmux a -t sess-01
Enter fullscreen mode Exit fullscreen mode

Image description

Ao fazer isso, perceba que o node continuou rodando, pois ao fazer detach ou mudar de sessão/janela, os programas continuam executando normalmente, e isso é muito útil! Se a gente tivesse se conectado a um terminal via ssh e criado uma nova sessão no tmux, o comportamento seria o mesmo! Uma vez que aprendemos tmux, temos tudo isso disponível independente do emulador de terminal, seja remoto ou não. Podemos fechar uma sessão em um terminal e voltar nesta mesma sessão em outro terminal horas depois!

Customizar atalhos

O prefixo C-b dos atalhos não é tão prático de usar, então a maioria dos usuários muda para C-a. Podemos fazer isso criando um arquivo ~/.tmux.conf com o seguinte conteúdo:

unbind C-b
set -g prefix C-a
bind C-a send-prefix
Enter fullscreen mode Exit fullscreen mode

Para que essa configuração tenha efeito, podemos abrir e fechar manualmente todas as sessões ou podemos usar o seguinte comando:

tmux source-file ~/.tmux.conf
Enter fullscreen mode Exit fullscreen mode

Ao fazer isso, o prefixo de todos os comandos passa a ser C-a. Testando e apresentando um último atalho útil, use C-a ? para ver todos os atalhos do tmux:

Image description

Eu também gosto outras customizações:

  1. C-a r para recarregar as configurações do tmux;
  2. C-a | ao invés de C-a % para criar painéis à direita;
  3. C-a - ao invés de C-a " para criar painéis abaixo;
  4. Começar a indexar as janelas e painéis com 1 ao invés de 0;

O meu arquivo ~/.tmux.conf ficou assim:

# C-a => Replaces C-b
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# C-b r => Reload config
bind r source-file ~/.tmux.conf

# C-b | => Replaces C-b %
unbind '%'
bind | split-window -h

# C-b - => Replaces C-b "
unbind '"'
bind - split-window -v

# Start windows and panes at 1, not 0
set -g base-index 1
setw -g pane-base-index 1

# Enabling mouse
set -g mouse on
Enter fullscreen mode Exit fullscreen mode

Resumo dos comandos

Dos comandos que vimos até aqui, fica um resumo já considerando o prefixo C-a e as customizações:

Atalho Operação Palavra-chave
C-a , Trocar o nome da janela -
C-a $ Trocar o nome da sessão $ession
C-a c Criar nova janela create
C-a p Ir para a janela anterior previous
C-a n Ir para a próxima janela next
C-a w Visualizar janelas windows
C-a d Sair da sessão detach
C-a | Criar painel à direita separar horizontalmente (|)
C-a - Criar painel abaixo separar verticalmente (-)
C-a z Toggle de zoom em um painel zoom
C-a Space Reorganizar painéis -
C-a Up Right Down

Conclusão

Eu gostei muito de ter aprendido tmux porque ele permite organizar diferentes assuntos e diferentes tarefas em diferentes sessões e janelas. Quando eu troco de sessão para ver outro assunto, a antiga sessão permanece configurada e posso voltar da onde parei, mesmo que seja horas depois e mesmo que eu tenha fechado o terminal.

Se um comando vai demorar para executar, crio uma nova janela para continuar trabalhando, depois volto e vejo o resultado, o que acho mais prático do que ficar trocando processos de foreground para background e vice-versa. E isso funciona no meu computador pessoal (Linux), no trabalho (macOS) ou em servidores remotos ao quais me conecto por ssh.

Referências

Top comments (0)