Novo: Eficify One em beta aberto. Crie seu primeiro ambiente sem cartão.Conhecer a plataforma →

Um terminal que trabalha por você: zsh, Oh My Zsh, Spaceship e Dracula

Estação de trabalho de uma pessoa desenvolvedora com um terminal colorido e personalizado na tela
CompartilharSeguir

A maior parte do dia de quem desenvolve, opera ou faz deploy acontece dentro de um terminal. Um shell mal configurado cobra um pedágio invisível em cada comando: contexto que você não enxerga, sugestão que não aparece, erro de digitação que só estoura ao apertar Enter. Um terminal bem montado devolve esse tempo, e ainda torna o trabalho mais agradável.

Ferramenta de produtividade boa é aquela que some. Depois de uma semana com o terminal certo, você esquece que ele está ali, e é exatamente esse o objetivo. Este é o setup que usamos no dia a dia: rápido para digitar, fácil de ler e com sugestões que aparecem antes de você precisar pedir. Funciona em macOS e Linux (no Windows, via WSL).

A ordem importa, então siga os passos na sequência. Cada camada se apoia na anterior.

A base: o shell zsh

O zsh é o shell que vai segurar todo o resto. No macOS atual ele já é o padrão; em distribuições Linux costuma estar a um apt install zsh (ou equivalente) de distância. Confirme o que você tem:

zsh --version

Se aparecer algo como zsh 5.9, você está pronto. Defina o zsh como shell padrão para que cada novo terminal já abra nele:

chsh -s $(which zsh)

Feche e abra o terminal. A partir daqui, todo ajuste mora em um único arquivo: o ~/.zshrc.

A camada de conveniência: Oh My Zsh

O zsh puro é poderoso, mas configurá-lo do zero dá trabalho. O Oh My Zsh é um framework que organiza temas, plugins e padrões sensatos sobre o zsh, então você ganha uma base sólida sem editar dezenas de linhas na mão.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Regra de ouro: antes de colar qualquer comando que baixa e executa um script da internet, abra a URL e leia o que ele faz. Vale para este e para qualquer outro.

O instalador faz um backup do seu .zshrc e cria um novo. Daqui em diante, é nesse arquivo que ativamos tema e plugins.

A fonte: JetBrains Mono

Antes do tema, resolva a fonte. A nossa sugestão é a JetBrains Mono: uma fonte monoespaçada gratuita e de código aberto, desenhada especificamente para quem passa o dia lendo código. Ela tem letras minúsculas mais altas para descansar a vista em sessões longas, distingue bem caracteres parecidos (o 0 e o O, o 1 e o l) e traz mais de 140 ligaturas, que transformam combinações como != e => em símbolos únicos.

Tem um detalhe importante para o prompt: o Spaceship exibe ícones (glifos de "Nerd Font") para sinalizar branch do Git, status, e por aí vai. A JetBrains Mono baixada no site oficial não inclui esses glifos, então, para o terminal, use a variante já com ícones, a JetBrains Mono Nerd Font. Instale os arquivos no sistema e selecione a fonte nas preferências do terminal (e do editor). Esse passo é fácil de esquecer, mas é ele que evita que os ícones do prompt apareçam como quadradinhos.

A identidade visual: tema Dracula

O Dracula é um esquema de cores escuro de alto contraste, com uma paleta consistente que existe para praticamente tudo: terminal, editor, navegador. Aplicá-lo no seu emulador de terminal (Terminal do macOS, GNOME Terminal, iTerm2, Windows Terminal) deixa o ambiente coeso e descansa a vista em sessões longas.

A instalação varia por terminal, então siga as instruções do próprio projeto para o app que você usa. É um ajuste rápido e puramente estético, mas faz diferença em quem passa horas na tela.

O prompt inteligente: Spaceship

Aqui o terminal deixa de ser só bonito e passa a ser informativo. O Spaceship é um prompt que mostra contexto relevante automaticamente: o branch e o estado do Git, a versão da linguagem do projeto, o tempo de execução de comandos demorados, se o último comando falhou. Tudo sem você digitar nada.

Clone o tema dentro do diretório de customização do Oh My Zsh e crie o link simbólico:

git clone https://github.com/spaceship-prompt/spaceship-prompt.git \
  "$ZSH_CUSTOM/themes/spaceship-prompt" --depth=1

ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" \
  "$ZSH_CUSTOM/themes/spaceship.zsh-theme"

Depois aponte o tema no ~/.zshrc:

ZSH_THEME="spaceship"

Recarregue a sessão (source ~/.zshrc ou abra um terminal novo) e o prompt já muda. O Spaceship é altamente configurável: você decide o que aparece e em qual ordem, via variáveis SPACESHIP_* no ~/.zshrc. Um exemplo de personalização, definindo as seções do prompt e a ordem delas:

SPACESHIP_PROMPT_ORDER=(
  user          # seção de usuário
  dir           # diretório atual
  host          # nome do host
  git           # seção do Git (git_branch + git_status)
  hg            # seção do Mercurial (hg_branch + hg_status)
  exec_time     # tempo de execução do último comando
  line_sep      # quebra de linha
  vi_mode       # indicador do modo vi
  jobs          # indicador de jobs em background
  exit_code     # código de saída do último comando
  char          # caractere do prompt
)
SPACESHIP_USER_SHOW=always
SPACESHIP_PROMPT_ADD_NEWLINE=false
SPACESHIP_CHAR_SYMBOL="❯"
SPACESHIP_CHAR_SUFFIX=" "

Cada item de SPACESHIP_PROMPT_ORDER é uma seção do prompt: comente ou remova as que você não usa. SPACESHIP_PROMPT_ADD_NEWLINE controla a linha em branco antes do prompt, e SPACESHIP_CHAR_SYMBOL define o símbolo do cursor (aqui, o clássico ). Um detalhe que vale ouro em máquinas com muitos projetos: desligar as seções de versão de linguagem que você não usa deixa o prompt visivelmente mais rápido, porque ele para de inspecionar o ambiente a cada comando.

A turbina: plugins com zinit

Os plugins são o que transformam o terminal em um copiloto. Para gerenciá-los com carregamento rápido, usamos o zinit:

bash -c "$(curl --fail --show-error --silent --location \
  https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"

Com ele instalado, adicione ao final do ~/.zshrc os três plugins que mais rendem no dia a dia:

zinit light zsh-users/zsh-autosuggestions
zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-completions

O que cada um faz, e por que importa:

  1. zsh-autosuggestions: completa o comando em cinza claro com base no seu histórico. Você digita git pu e ele sugere o git push origin main que você já rodou ontem. Aceite com a seta para a direita.
  2. fast-syntax-highlighting: colore o comando enquanto você digita. Comando válido fica verde, inexistente fica vermelho. Você descobre o erro de digitação antes de apertar Enter, não depois.
  3. zsh-completions: amplia o autocompletar com Tab para um monte de ferramentas (gerenciadores de pacote, CLIs, frameworks), então parar de decorar flag de comando.

Recarregue a sessão e teste. A combinação de sugestão por histórico mais destaque de sintaxe é o que mais muda a sensação de usar o terminal.

Recursos do zsh que valem o aprendizado

O zsh não é só um bash mais bonito. Vários recursos nativos mudam o dia a dia assim que você os conhece, e a maior parte se ativa com setopt e aliases no ~/.zshrc:

  • autocd: digite o nome de um diretório, sem o cd, e ele entra.
  • Globbing recursivo: ls **/*.ts lista todos os arquivos .ts em qualquer subpasta, sem precisar de find.
  • Correção de comandos: o zsh sugere a forma certa quando você erra um comando ou um caminho.
  • Histórico compartilhado: comandos de uma aba ficam disponíveis nas outras na hora, não só ao fechar a sessão.
  • Expansão poderosa no Tab: navegue pelas opções de autocompletar com Tab e as setas, inclusive em flags e caminhos.

Um ponto de partida útil para o ~/.zshrc, juntando histórico saudável, conveniência e alguns atalhos:

# histórico
setopt SHARE_HISTORY          # compartilha o histórico entre sessões
setopt HIST_IGNORE_ALL_DUPS   # não guarda comandos duplicados
setopt INC_APPEND_HISTORY     # grava na hora, não só ao fechar
HISTSIZE=50000
SAVEHIST=50000

# navegação e conveniência
setopt AUTO_CD                # 'projetos' equivale a 'cd projetos'
setopt CORRECT                # sugere correção de comandos digitados errado

# atalhos do dia a dia
alias gs='git status -sb'
alias gc='git commit'
alias ll='ls -lah'

Nenhum desses ajustes é obrigatório, mas cada um remove uma fricção que, repetida dezenas de vezes por dia, cansa. Comece com poucos e vá incorporando o que fizer sentido para o seu fluxo.

O terminal integrado do editor

Não deixe metade da experiência para trás ao mudar de janela. No VS Code, aponte o terminal integrado para o zsh e use a mesma JetBrains Mono no editor e no terminal. Abra o settings.json (Cmd/Ctrl + Shift + P, "Preferences: Open User Settings (JSON)") e adicione:

{
  "terminal.integrated.shell.osx": "/bin/zsh",
  "terminal.integrated.fontFamily": "JetBrains Mono",
  "editor.fontFamily": "JetBrains Mono",
  "editor.fontLigatures": true
}

Assim você tem, dentro do editor, o mesmo prompt, as mesmas cores e os mesmos atalhos do terminal. A coerência entre janela e editor reduz o atrito de ficar trocando de contexto. Em versões recentes do VS Code, o caminho recomendado para definir o shell migrou para os perfis (terminal.integrated.defaultProfile.osx), mas a chave acima continua funcionando e é a forma mais direta de começar.

Vale a pena?

Esse setup leva uns vinte minutos para montar e devolve esse tempo já na primeira tarde. Mas o ponto não é a estética: é o efeito composto de pequenas frições que somem. Ver o branch sem rodar git status, recuperar um comando longo com uma tecla, pegar o typo na cor errada antes de executar. Cada uma é trivial; juntas, mudam o ritmo de quem vive no terminal.

Ferramenta afiada é parte de cultura de engenharia, e cultura de engenharia é o que faz um time entregar com consistência. É nesse tipo de detalhe, do ambiente local ao pipeline de produção, que a gente gosta de mexer. Se o seu time convive com fricções que viraram rotina, conte seu cenário e vamos olhar juntos onde dá para destravar.

CompartilharSeguir
Bruno Carrilhos

SOBRE O AUTOR

Bruno Carrilhos

CTO · Eficify

Executivo de tecnologia, cofundador da Eficify, com mais de 20 anos de experiência na criação, evolução e sustentação de soluções digitais. Atua nas áreas de desenvolvimento de software, dados, inteligência artificial, cloud computing, cibersegurança e operações de missão crítica. É bacharel em Ciência da Computação, com formação em Ciência de Dados e Inteligência Artificial e pós-graduação em Segurança da Informação.

VAMOS CONVERSAR

Entregar em produção não precisa dar medo.

Conte seu cenário e receba um diagnóstico do seu fluxo de deploy e operação, sem compromisso.

Falar com um especialista