>_ josetilabs.com
← blog

06 nov 2026 · linux, terminal, zsh · 4 min

autocomplete no terminal: o que o zsh faz sozinho e o que precisa de plugin

Zsh traz completion nativo via compinit. Autosuggestions, syntax highlighting e completions extras sao plugins que voce clona e carrega por conta propria. A ordem de carga importa: syntax-highlighting deve ser o ultimo a carregar, senao a cor quebra.

O que o zsh faz sozinho

Zsh nao precisa de plugin para completar comandos, caminhos e opcoes. Basta ativar compinit no .zshrc:

bash
autoload -Uz compinit && compinit

Com isso, git che<TAB> lista subcomandos e cd /usr/loc<TAB> completa caminhos. A completion e contextual: conhece as opcoes de cada comando se o arquivo de completion existir, o que vem com o zsh ou com o pacote do programa. O bash tambem tem completion, mas o do zsh e mais rico e nao precisa de pacote extra.

compinit le um cache em ~/.zcompdump para nao reparsear tudo a cada abertura. Se voce instalou um programa novo e o Tab nao sugere as opcoes dele, o cache esta velho. Rode rm -f ~/.zcompdump && compinit uma vez. Em disco lento, use compinit -C para pular a verificacao de seguranca e abrir mais rapido.

A completion nativa cobre a maioria dos programas instalados, mas programas novos ou pouco conhecidos podem nao ter arquivo de completion. Nesse caso o Tab nao sugere nada ou sugere arquivos. zsh-completions preenche essa lacuna com mais de 500 definitions, sem custo de execucao perceptivel.

O que precisa de plugin

Tres coisas que as pessoas querem e que nao vem no zsh base:

Recurso Nativo do zsh Plugin Custo
Completion de comandos e caminhos sim, via compinit nao precisa zero
Sugestao cinza do historico nao zsh-autosuggestions um clone git
Cor em comando invalido nao zsh-syntax-highlighting um clone git
Completion de programa novo depende do pacote zsh-completions um clone git

O artefato

Script que verifica o zsh, lista os 3 plugins faltantes, cria backup do .zshrc e anexa o bloco minimo. Rode numa maquina com zsh instalado.

bash
#!/usr/bin/env bash
set -euo pipefail

ZSHRC="$HOME/.zshrc"
PLUGIN_DIR="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins"

echo "== 1. zsh que voce ja tem =="
if command -v zsh >/dev/null 2>&1; then
  zsh --version
else
  echo "zsh nao encontrado neste ambiente (contêiner minimo)."
  echo "no seu sistema: apt install zsh  (ou brew install zsh)"
fi

echo

echo "== 2. completion nativo (sem plugin) =="
echo "zsh traz compinit. basta ativar:"
echo "  autoload -Uz compinit && compinit"
echo "teste: digite 'git che<TAB>' e veja as subcomandos."

echo

echo "== 3. plugins que precisam de clone =="
for p in zsh-autosuggestions zsh-syntax-highlighting zsh-completions; do
  if [ -d "$PLUGIN_DIR/$p" ]; then
    echo "ok: $p ja esta em $PLUGIN_DIR/$p"
  else
    echo "falta: $p (clone em $PLUGIN_DIR/$p)"
  fi
done

echo

echo "== 4. escrevendo bloco em $ZSHRC (backup antes) =="
if [ -f "$ZSHRC" ]; then
  cp "$ZSHRC" "$ZSHRC.bak.$(date +%s)"
  echo "backup criado"
fi
mkdir -p "$PLUGIN_DIR"
cat >> "$ZSHRC" <<'EOF'

# --- autocomplete minimo ---
autoload -Uz compinit && compinit
# plugins (clone antes de ativar; ver README de cada um)
# source $ZSH_CUSTOM/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
# source $ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
EOF
echo "bloco anexado (linhas comentadas: descomente apos clonar)"

echo

echo "== 5. ordem importa =="
echo "syntax-highlighting deve ser o ultimo a carregar; autosuggestions antes dele."
echo "pronto."

Como verificar

Rode o script e confira a saida: ele deve listar o zsh instalado, mostrar o comando compinit e apontar quais dos 3 plugins faltam. Depois de clonar os plugins e descomentar as linhas, abra um terminal novo e digite um comando antigo: o texto cinza deve aparecer. Digite um comando inexistente: a cor deve mudar para vermelho.

Se der errado

FAQ

Preciso do oh-my-zsh para isso? Nao. Os plugins funcionam sozinhos com source no .zshrc. oh-my-zsh e um gerenciador de plugins e temas; util, mas nao obrigatorio.

compinit e lento na abertura do terminal. E normal em disco lento. Rode compinit -C para pular a verificacao de seguranca, ou use zsh-defer para carregar em segundo plano.

Autosuggestion nao aparece para comando novo. Ele so sugere o que esta no historico. Rode o comando uma vez e ele passa a aparecer.

Qual a diferenca entre zsh-autosuggestions e zsh-autocomplete? zsh-autosuggestions mostra uma sugestao cinza do historico. zsh-autocomplete abre um menu de completion enquanto voce digita. Sao complementares.

Posso usar isso no bash? Nao diretamente. O bash tem ble.sh e bash-completion, mas a API e diferente. Veja fzf no terminal para uma opcao que funciona nos dois.

Como aceitar apenas parte da sugestao? Qualquer widget que move o cursor para a direita aceita parte do texto sugerido. Alt+F aceita uma palavra; Ctrl+F aceita caractere por caractere. Veja a documentacao do plugin.

Figura

Terminal mostrando que o zsh nao esta instalado no contêiner mínimo, que o completion nativo usa autoload compinit, e que 3 plugins faltam no diretorio de plugins
Saida real do script rodando num contêiner minimo: zsh ausente, compinit nativo e os 3 plugins faltando.

Fontes: zsh-autosuggestions (MIT), zsh-syntax-highlighting (BSD-3), zsh-completions, completion system. Veja tambem terminal que parece limpo.

Leia também

// Por e-mail

Os textos publicados aqui também vão por e-mail. O envio ainda não começou: quem deixar o endereço agora entra na primeira lista.

Guardo só o seu e-mail, a data e o registro desta autorização. Sem cookies, sem rastreador e nada compartilhado com terceiros. Detalhes na política de privacidade.