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/

Soy un ingeniero informático brasileño radicado en Alemania, apasionado por la tecnología, la ciencia, la fotografía y los idiomas.
Llevo programando cerca de dos décadas, explorando desde apps móviles y desarrollo web hasta aprendizaje automático. Hoy me enfoco en SRE en la nube e ingeniería de datos.
Soy voluntario en las comunidades de open source y Python, ayudando a organizar PyCon DE y PyData Berlin, dando mentorías y contribuyendo con código y traducciones.
En mi blog comparto consejos de Linux, guías de configuración y notas personales que escribí como referencia futura. Espero que también sean útiles para otras personas. El contenido está disponible en varios idiomas.
Visita mi galería para ver algunas de mis fotografías.
Fuera del teclado, me encontrarás en conciertos, tocando el clarinete, en bicicleta, buceando o explorando nuevos lugares, culturas y cocinas.
¡Siempre feliz de conectar! 🙂