1001Ferramentas
🐚 Dev

Gerador de .zshrc Mínimo

Monta um .zshrc enxuto sem Oh My Zsh: histórico, completion, prompt simples com branch git e PATH.

Um .zshrc enxuto, sem framework

O zsh é o shell padrão do macOS desde o Catalina e ganhou espaço no Linux por trazer de fábrica o que o bash só tem com esforço: completação com menu, correção de digitação, expansão de caminho no meio da palavra. A reação comum é instalar um framework grande logo de cara — e herdar centenas de milissegundos de tempo de partida e um monte de configuração que ninguém entende.

A página monta um arquivo direto ao ponto, com as opções que rendem mais por linha: histórico compartilhado entre sessões e sem duplicatas, sistema de completação ligado, navegação de diretórios sem digitar cd e as correções de digitação. Tudo isso é nativo do zsh — não depende de plugin nem de gerenciador de plugins.

Vale saber a ordem em que os arquivos são lidos, porque ela explica quase toda confusão de variável de ambiente que some. O .zshenv é lido em toda invocação, inclusive script. O .zprofile só no login. O .zshrc em shell interativo, que é onde vão alias, prompt e completação. E o .zlogin depois do zshrc, no login. Variável de ambiente que precisa valer em script pertence ao zshenv, não ao zshrc.

Perguntas frequentes

Preciso mesmo de um framework?
Não. Framework entrega tema pronto e um catálogo de plugins, o que tem valor, mas cobra em tempo de partida e em complexidade. Um zshrc de trinta linhas cobre o que a maioria usa. Se depois faltar alguma coisa específica, dá para acrescentar um gerenciador leve sem refazer tudo.
Por que a completação exige duas linhas?
Porque compinit inicializa o sistema e precisa ser chamado depois de autoload. A separação existe para você poder acrescentar diretórios de completação entre as duas chamadas. Se aparecer aviso sobre diretórios inseguros, é permissão de escrita ampla demais em alguma pasta do caminho de funções.
Dá para reaproveitar meu .bashrc?
Em parte: alias e funções simples costumam funcionar sem mudança. O que quebra é sintaxe específica, principalmente arrays, que começam no índice 1 no zsh e no 0 no bash, e a expansão de variável não entre aspas, que o zsh não divide em palavras — diferença que já rendeu bug em vários scripts migrados.

Ferramentas Relacionadas