DEV Community

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

Posted on • Edited 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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay