Prompt curto no Bash e ZSH

Eu procuro deixar meus arquivos bem organizados para que seja fácil encontrar algum arquivo quando eu precisar; uma das consequências dessa organização é que, às vezes, é necessário navegar por vários subdiretórios até chegar onde quero.

Por exemplo, para um simples acesso a um livro, eu tenho que executar os seguintes comandos:

julio@julio-acer ~  $ cd /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp/
julio@julio-acer /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp  $ okular Practical Common Lisp.pdf &

Encontrar e navegar até a pasta correta não é nada complicado combinando tab completion, autojump plugins (ex.: fasd) e aliases no meu ~/.bashrc que me levam direto para a pasta desejada:

alias docs='cd /media/externo/Documentos'

O problema aqui é que o prompt da linha de comando exibe o caminho completo da pasta onde estou; nesse caso são apenas 8 diretórios com nomes curtos, mas, em muitos casos, é preciso entrar em pastas ainda mais profundas e com nomes longos, o que faz com que só o caminho para a pasta ocupe toda a tela.

Bash

Existe uma variável de sistema que “apara” a exibição desse caminho, limitando-o a um número máximo de diretórios mostrados. Essa variável é a PROMPT_DIRTRIM. Basta exportá-la igualada ao valor máximo de pastas a serem exibidas (3 é um bom número) que o restante do caminho será substituído por ....

Exemplo:

julio@julio-acer ~  $  cd /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp/
julio@julio-acer /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp $  export PROMPT_DIRTRIM=3
julio@julio-acer .../Lisp/Peter Seibel/Practical Common Lisp  $  pwd
/media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp
julio@julio-acer .../Lisp/Peter Seibel/Practical Common Lisp  $

Para tonar essa alteração permanente, adicione a seguinte linha ao ~/.bashrc:

export PROMPT_DIRTRIM=3

ZSH

Para o ZSH não existe uma variável $PROMPT_DIRTRIM igual ao BASH, mas podemos conseguir um resultado parecido editando a variável do próprio $PROMPT (=$PS1):

julio@julio-acer /media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo
julio@julio-acer /media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo> PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '
julio@julio-acer projetos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo

O segredo está no %3c, que faz com que apenas os 3 últimos diretórios sejam exibidos.

Para tornar essa mudança padrão, basta exportar essa variável no ~/.zshrc:

export PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '

O arquivo que utilizei como exemplo é um dos melhores livros introdutórios para aprender Common Lisp e pode ser consultado gratuitamente em http://gigamonkeys.com/book/

Julio Batista Silva
Julio Batista Silva
Engenheiro de Dados

Eu sou um engenheiro de computação apaixonado por ciência, tecnologia, fotografia e idiomas. Atualmente trabalhando como Engenheiro de Dados na Alemanha.

comments powered by Disqus