Uno de los frameworks más populares de zsh es Oh-My-Zsh!, el cuál podremos instalar para dotar a nuestro sistema de funcionalidades muy interesantes que nos harán más cómodo su uso.
Instalación de oh-my-zsh
Para instalarlo necesitaremos curl
y git
, por lo que instalamos dichos requisitos previamente:
$ sudo apt install git curl -y
Una vez los tengamos instalados, escribimos el comando siguiente, el cuál descargará el script oficial de instalación de Oh-my-zsh!:
$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Cloning Oh My Zsh...
Cloning into '/home/manz/.oh-my-zsh'...
Es posible que al finalizar la instalación nos pregunte si queremos sobreescribir la configuración de ~/.zshrc
o si queremos establecer zsh como shell por defecto, si corresponde. Una vez terminado el proceso, debería aparecernos algo como lo siguiente:
Podemos ver que el prompt de la shell ya ha cambiado a algo más bonito y amigable, haciendo uso de colores. Sin embargo, puede resultarnos demasiado simple. Veamos como podemos cambiarlo por otro theme.
Cambiar el tema de zsh
Una de las características más llamativas de zsh es la posibilidad de cambiar el theme de la terminal, a uno más vistoso y llamativo. La shell zsh incorpora de serie varios themes para la terminal que podemos utilizar según nuestros gustos.
Por ejemplo, uno de mis preferidos es agnoster. Para seleccionar este tema, simplemente tenemos que editar el archivo de configuración ~/.zshrc
y buscar la línea siguiente:
ZSH_THEME="robbyrussell"
El tema robbyrussell
es el que viene por defecto, pero podemos cambiarlo por agnoster
o por cualquier otro de la lista de themes de zsh. De hecho, incluso podemos indicar random
como tema, y descomentar una línea que aparece más abajo, que nos activar un tema aleatorio de esa lista, de forma aleatoria cada vez que abramos una terminal:
ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" "xiong-chiamiov" )
Si todo ha ido bien al cambiar el tema por agnoster
, al guardar el fichero de configuración y abrir una nueva terminal ya debería aparecernos la nueva interfaz del intérprete de comandos:
Ten en cuenta que es posible que algunos carácteres se nos muestren incorrectamente (como cuadrados o similar). Esto suele ocurrir cuando usamos una tipografía que no es capaz de mostrar los carácteres especiales que necesitamos. Para solucionarlo, te recomendamos instalar y utilizar una tipografía de NerdFonts.
Error 12: character not in range
Es muy común, que instalando los plugins, gestionando los themes y personalizando los apartados anteriores, te puedas encontrar de repente con que al iniciar la terminal, nos aparece un error similar al siguiente:
(anon):12: character not in range
Este problema ocurre por conflictos en la lectura de carácteres Unicode, ya que es posible que esté intentando leer alguno que no exista en el conjunto de carácteres instalados (es muy común en Docker, donde no tienes los locales preinstalados). Para resolverlo, simplemente instala los paquetes de localización escribiendo sudo apt install locales-all
y reinicia la sesión de usuario.
Autocompletado y sugerencias
Existen una serie de plugins creados por la comunidad de zsh muy interesantes, que podemos instalar en nuestra terminal para ampliar sus capacidades y hacerla mucho más cómoda.
Plugin | Descripción |
---|---|
zsh-syntax-highlighting | Resaltado de sintaxis para comandos, basado en fish. |
zsh-autosuggestions | Sugerencias basadas en el historial, basado en fish. |
zsh-completions | Autocompletado mejorado para comandos. |
El primero de ellos, zsh-syntax-highlighting
, es el resaltado de color de comandos, el cuál viene de una característica que incorporaba inicialmente el intérprete de comandos fish. Al escribir un comando en la terminal nos aparecerá en rojo si no está instalado en el sistema o en verde si está disponible para utilizar. De esta forma sabremos, a medida que vamos escribiendo los comandos, si los estamos escribiendo bien (o por lo contrario, tenemos erratas) o si no se encuentra instalado un comando, por ejemplo, incluso antes de pulsar la tecla ENTER.
El segundo, zsh-autosuggestions
, es un plugin que a medida que escribimos un comando, nos sugiere y recuerda comandos escritos anteriormente (que residen en el historial de la terminal) en color gris de fondo, para que sea más sencillo para nosotros identificarlos. Pulsando → le decimos a zsh que lo recupere íntegro, lo que puede ser útil para comandos largos.
Por último, el plugin zsh-completions
nos permite activar ciertas características interesantes de autocompletado en zsh, como por ejemplo atajos al pulsar TAB en git
, composer
de PHP, nano
, el firewall ufw
, node
y muchos otros.
Para instalar estos plugins, lo que tendremos que hacer es simplemente copiar y pegar los siguientes comandos. En ellos, lo que estamos haciendo es descargarnos (clonar el repositorio del plugin de git) y guardándolo en nuestra carpeta personal, en un apartado de plugins personalizados de oh-my-zsh. Podemos hacerlo todo con estos tres comandos:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
Una vez hecho, editamos el fichero ~/.zshrc
y bajamos hasta la linea donde se cargan los plugins, generalmente con esta configuración plugins=(git)
. Ampliamos esa lista de plugins, escribiendo lo siguiente:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting zsh-completions)
autoload -U compinit && compinit
Con esto, cargaremos esos 4 plugins y tendremos listo estas funcionalidades adicionales desde que volvamos a abrir una nueva terminal.
Es posible que el plugin de autocompletado no aplica el color adecuado. Puedes solucionarlo editando el archivo
~/.zshrc
y añadiendo la lineaexport ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=5"
. Esto permitirá cambiar el color del autocompletado desde el historial, donde el5
es el color (en este caso color morado).