Na minha caminhada em aprender a usar o vim observei as pessoas recomendando a utilização de outro programa chamado tmux. Ele é um multiplexador de terminais, ou seja, posso abrir vários terminais dentro dele.

Uma vantagem de usar o tmux e não o gnome terminal/terminator/tilix é que ele guarda a sessão de terminal que estamos usando! Então caso eu precise fechar a janela, eu posso simplesmente conectar na mesma sessão novamente e tudo vai estar como deixei. Outra vantagem é que se precisar editar algo em um servidor remoto via ssh, eu terei a vantagem de poder abrir vários terminais facilmente igual eu teria se estivesse usando o terminator ou tilix.

Vamos precisar dos seguintes programas instalados:

$ sudo dnf install tmux xclip

Conceitos

  • servidor tmux: armazena todo o estado dos terminais na memória;
  • cliente tmux: conecta no servidor para mostrar os terminais para usuário;
  • sessão: agrupa uma ou mais janelas;
  • janela: agrupa uma ou mais painéis;
  • painel: contém um terminal e um programa executando, aparece em uma janela.

Arquivo de configuração

Vamos criar o arquivo na home do usuário:

$ touch ~/.tmux.conf

Podemos recarregar as configurações em uma sessão já iniciada usando :source ~/.tmux.conf.

Seguir as instruções na página do github do tpm para instalar o gerenciador de plugins. A seguir o arquivo completo:

# plugins

set -g @plugin 'odedlaz/tmux-onedark-theme'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

# habilita plugin tmux-continuum

set -g @continuum-restore 'on'

# mapeia <C-b> para <C-a>

set -g prefix C-a
unbind C-b
bind C-a send-prefix

# consertar delay irritante ao mudar de modo no vim

set -sg escape-time 0

# ativa o teclado dentro do tmux

set-option -g mouse on

# manda o buffer de copia do tmux para clipboard

bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel 'xclip -se c -i'

# mode-keys usando bindings do vim

setw -g mode-keys vi

# teclas de direção do vim para mudar painel

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# tpm
run '~/.tmux/plugins/tpm/tpm'

Usando tmux

Começamos criando uma sessão:

$ tmux new -s <nome_da_sessao>

O argumento -s cria a sessão com um nome. Para conectar numa sessão já existente utilizamos:

$ tmux a -t <nome_da_sessao>

Se não sabe o nome das sessões disponíveis no servidor tmux é só usar o comando:

$ tmux ls

Comandos úteis iniciais

Para executar qualquer comando para o tmux é preciso usar uma tecla especial, o padrão é o <C-b>. Mas mudei no arquivo de configuração para <C-a> porque é mais fácil de digitar, ver sessão de arquivo de configuração no início desse post.

gerais

  • d -> desconectar da sessão;
  • s -> mudar de sessão;
  • :kill-session: encerrar a sessão;
  • :kill-server: encerrar o servidor.

janelas

  • c -> cria uma janela;
  • w -> ir para janela na lista;
  • n -> ir para próxima janela;
  • l -> ir para janela anterior;
  • & -> fecha janela atual.

painéis

  • % -> dividir o painel atual horizontalmente;
  • " -> dividir o painel atual verticalmente;
  • o -> ir para o próximo painel;
  • ; -> alternar entre o painel atual e o anterior;
  • A-Seta -> muda tamanho do painel;
  • z -> ver o painel atual na janela inteira, se pressionar novamente volta ao normal;
  • { -> move painel atual para esquerda;
  • } -> move painel atual para direita;
  • C-o -> gira em sentido anti-horário todos os painéis;
  • x -> fechar o painel atual.

modo para copiar (modo vi)

  • [ -> entrar no modo de copiar;
  • v -> ativa modo em bloco;
  • Space -> inicia modo visual de seleção;
  • Enter -> manda conteúdo copiado para buffer e sai do modo copiar;
  • ] -> cola o que foi salvo no último buffer no local.

tmux plugin manager

  • I -> instala os plugins que foram adicionados na configuração;
  • u -> atualiza plugins;
  • alt u -> desinstala os plugins que foram apagados na configuração.

tmux ressurect

  • C-s: salvar sessão;
  • C-r: carregar sessão salva.

Referências