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 e um alias no meu ~/.bashrc
que me leva direto para a pasta
Documentos:
alias documentos='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á substituido 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/