Prompt corto en Bash y ZSH
Procuro mantener mis archivos bien organizados para que sea fácil encontrar algo cuando lo necesite; una consecuencia de esa organización es que, a veces, es necesario navegar por varios subdirectorios hasta llegar a donde quiero.
Por ejemplo, para abrir un libro, tengo que ejecutar los siguientes 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 y navegar hasta la carpeta correcta no es nada complicado combinando tab completion,
plugins de autojump (p. ej.: fasd) y alias en mi ~/.bashrc que me llevan directo a la carpeta
deseada:
alias docs='cd /media/externo/Documentos'
El problema aquí es que el prompt de la línea de comandos muestra la ruta completa del directorio en el que estoy; en este caso son solo 8 directorios con nombres cortos, pero, en muchos casos, hay que entrar en rutas aún más profundas y con nombres largos, lo que hace que solo la ruta ocupe toda la pantalla.
Bash
Existe una variable del sistema que “recorta” la visualización de esa ruta, limitándola a un número
máximo de directorios mostrados. Esa variable es PROMPT_DIRTRIM. Basta con exportarla con el valor
máximo de carpetas a mostrar (3 es un buen número) y el resto de la ruta será sustituido por ....
Ejemplo:
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 hacer este cambio permanente, añade la siguiente línea a ~/.bashrc:
export PROMPT_DIRTRIM=3
ZSH
En ZSH no existe una variable $PROMPT_DIRTRIM como en Bash, pero podemos lograr un resultado
parecido editando la propia variable del $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 proyectos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo
El secreto está en %3c, que hace que solo se muestren los 3 últimos directorios.
Para hacer este cambio predeterminado, basta con exportar esa variable en ~/.zshrc:
export PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '
El archivo que utilicé como ejemplo es uno de los mejores libros introductorios para aprender Common Lisp y puede consultarse gratuitamente en http://gigamonkeys.com/book/