Sácale el máximo partido a tu terminal con zsh

No quiero tirar de términos de moda y hablar de DevOps, pero sí es cierto que, yo por lo menos, paso cada vez más tiempo delante de una terminal de UNIX. Estoy empezando a sentirme como en casa en algo que hace unos años me asustaba bastante.

Hoy vengo a hablaros de zshell, una alternativa a bash, el intérprete que viene por defecto en la mayoría de distribuciones. Algunos pensaréis… “¿Cambiar el intérprete? ¡Eso suena muy difícil!“, pero nada más lejos de la realidad! Otros diréis… “¿Para qué iba yo a querer uno distinto? ¿Cual es el problema con bash?” Problema ninguno! Pero con este post espero enseñaros todo lo que os estáis perdiendo por no utilizar zshell. Además, lo más importante es que no hay que aprender ningún comando nuevo: practicamente todo lo que usas en bash funcionará en zsh.

Instalación de zshell

Instalarlo es muy simple en la mayoría de distribuciones, ya que hay un paquete ya listo para nosotros. No os preocupéis que por el hecho de instalarlo, no lo estamos activando todavía. Por ejemplo, en Ubuntu:

sudo apt-get install zsh

Una vez instalado tenemos que configurarlo. Una de las ventajas de zshell, es que está pensado para que puedas configurarlo de forma modular a través de plugins y templates. Para ayudarnos a gestionar la configuración, vamos a instalar otra cosa rápidamente: oh-my-zsh. Es un framework hecho por la comunidad con un montón de plugins que además de aportarnos funcionalidad extra, hará que sea fácil configurar zsh a nuestro antojo. Tranquilos, instalar esto tampoco activará zsh. Para instalar oh-my-zsh automáticamente solo ejecutamos:

curl -L http://install.ohmyz.sh | sh

Para los indecisos (espero que no quede ninguno al finalizar el post), podéis probar este intérprete sin ponerlo por defecto, y solo hacer el cambio cuando estéis 100% seguros. Para probarlo y ver de qué va esto, ejecutad en la consola:

zsh

Veréis que de repente vuestro prompt ha cambiado. Tranquilos, es normal: zsh tiene configurado un prompt distinto al que bash tiene. Vamos a ver algunas de las ventajas más obvias de zsh. Recordad que siempre podéis volver a dejarlo todo como estaba escribiendo:

bash

Ventajas de zsh

Prompt

Una de las cosas que más nos gusta a los frikis de la consola es configurar nuestro prompt para que aparezca información relevante más allá del _path_ actual en el que estamos. El que zsh trae por defecto ya es bastante bueno, indicando información de la rama actual de git en la que estamos. Esto ya es configurable con bash, pero al haber instalado oh-my-zsh tenemos acceso a todos los themes de la comunidad donde podremos elegir verdaderas maravillas. Para activar un theme, tan solo tenemos que modificar el archivo de configuración en ~/.zshrc y cambiar el que viene por defecto, por uno del listado. La línea a modificar es:

ZSH_THEME="robbyrussell"

Si queremos hacerlo nosotros mismos, podemos configurar no solo el prompt normal, sino que nos permite configurar texto a la derecha del prompt. Para que os hagáis una idea, el que yo utilizo actualmente muestra, además de lo habitual, la rama actual de git, si hay cambios por comittear pendientes, el load de la máquina y la hora actual, estos dos últimos en la parte derecha del prompt. Luce así:

zsh prompt

Probad a escribir ‘cd ‘ y darle a tabulador para que os sugiera los posibles directorios. Dadle varias veces a tabulador y podréis ir eligiendo uno a uno. ¿Que no queréis ir uno a uno? ¡Sin problema! Utilizad las flechas del teclado para navegar entre las sugerencias.

Elegid uno de los directorios para entrar en él. Ahora probad a escribir ‘..’. Con eso iréis al directorio padre. Y si ponéis ‘…’ al superior. Y así sucesivamente. Útil, ¿no?

A veces es un poco engorroso recordar exactamente el nombre del directorio al que queremos acceder. Tranquilos, zsh es muy listo y si intentáis entrar en un directorio pero poniendo solo parte de su nombre, zsh intentará averiguar a cual te refieres y, si lo consigue, entrará en él. Incluso aunque lo que hayas escrito no sea el principio del nombre del directorio.

Además, escribir “cd” para movernos es poco eficiente. Si probáis a escribir tan solo el nombre de la carpeta, sin ponerle el “cd” delante, también entrará en el directorio.

Si llegados a esto todavía no os parece canela en rama, tranquilos, que hay más.

Mejor historial

En la consola acabamos repitiendo los mismos comandos varias veces. Hasta ahora, yo utilizaba control+R para buscar en el historial, o si era un comando reciente, le daba a la flecha hacia arriba del cursor para ir hacia atrás en el historial. Esto está bien, pero zsh lo mejora haciendo que solo vaya recorriendo aquellos comandos que coinciden con lo que tienes actualmente escrito. Es decir, si yo escribo “vim” y voy dándole hacia arriba, solo irá navegando por el historial de comandos que empezaban con “vim”.

Además, siempre podemos conseguir que zsh sea más eficiente, viendo qué comandos son los que más utilizamos y creando alias para ellos. Igual que en bash, con la diferencia de que zsh nos proporciona un comando con información detallada sobre lo que más utilizamos:

zsh_stats

Plugins

Todo esto es lo que nos ofrece zsh por defecto, pero lo bueno de oh-my-zsh es que nos ofrece un montón de plugins que añaden alias a acciones de nuestro día a día para que la shell sea todavía más cómoda. Para añadir o quitar plugins, tan solo tenemos que editar el archivo de configuración de zsh situado en ~/.zshrc y modificar la línea de los plugins. Actualmente la mía está así:

plugins=(git autojump colored-man colorize extract zsh-syntax-highlighting)

Con estos plugins obtengo desde archivos del manual con texto coloreado, hasta un comando nuevo llamado extract que puedo utilizar para descomprimir cualquier tipo de archivo comprimido sin preocuparme de cómo se descomprime: él decidirá qué es lo que debe utilizar: zip, gz, etc. Además, como habréis notado en los pantallazos anteriores, cuando estoy escribiendo un comando en la terminal, está coloreado en verde si la shell lo reconoce. Si estoy escribiendo un comando que no existe, zsh lo escribe en rojo.

AutoJump

Quiero hacer mención especial a uno de los plugins que tengo activados: autojump. Si la navegación entre directorio ya es la más cómoda del mundo con zsh, autojump va todavía más allá y va guardando tus directorios más utilizados en tu día a día. De tal forma que tan solo tienes que escribir “j” seguido de una cadena que él intentará matchear contra tu historial de directorios, y entrará en aquel que más hayas visitado. Esta cadena puede ser desde una letra, hasta el nombre entero de la carpeta. En este ejemplo, escribiendo “j w”, él ya sabía que me estaba refiriendo a /var/www.

Autojump

Para instalarlo tan solo ejecuta:

sudo apt-get install autojump

Dejando zsh por defecto en vez de bash

Si finalmente os he convencido, solo queda activar zsh para que sea siempre vuestra shell, en vez de bash. Para hacer esto, solo tenéis que ejecutar:

chsh -s $(which zsh)

Si por algún motivo que se me escapa quisierais volver a utilizar bash, solo tenéis que ejecutar:

chsh -s $(which bash)

Conclusión

Hay muchísimas más cosas que me dejo en el tintero. Como véis, zsh aporta un montón de comodidades extras a bash. Realmente, no hay nada que no podamos hacer a mano en bash, configurando alias y creando scripts, pero es mucho mejor apoyarnos en la sabiduría de toda una comunidad dedicada a esto.

¿Alguno no se ha convencido de cambiarse?

Enlaces de interés

Problema con ciertos prompts que duplican el comando. Asegúrate de que tu fichero .zshrc tiene estas dos líneas:

export LANG=en_US.utf8
export LC_ALL=en_US.utf8

Tutorial de zsh

Oh-My-zsh!

Plugins de oh-my-zsh

Autojump

Share Comments
comments powered by Disqus