Archivo de la etiqueta: cli

Personalizando zsh: antigen

En una entrada anterior hablaba de oh-my-zsh, que es una forma de personalizar zsh.

Aunque con oh-my-zsh se pueden conseguir cosas bastante interesantes como vimos, con antigen se puede realizar esto con más facilidad.

Antigen es realmente un gestor de plugins para zsh, que actúa de intermediario entre nosotros y el fichero de configuración .zshrc (con antigen es mucho más fácil su gestión).

Para instalar antigen haremos esto:

curl -L https://raw.githubusercontent.com/zsh-users/antigen/master/antigen.zsh > antigen.zsh

source antigen.zsh

A partir de ahora ya podemos probarlo. Como ejemplo vamos a ver cómo activar el plugin que activa el resaltado de la sintaxis en zsh:

antigen bundle zsh-users/zsh-syntax-highlighting

Con esto activamos dicho plugin.

Si queremos probar con un tema para el prompt, nada más fácil:

antigen theme agnoster

Como ya os indiqué en la entrada de oh-my-zsh, tenéis todos los temas aquí.

Si queremos que estos cambios estén siempre activos cuando arranquemos nuestra sesión en el terminal, meteremos estos cambios en .zsh, pero de esta forma:

antigen bundles <<EOBUNDLES
  command-not-found
  gem
  npm
  sublime
  python
EOBUNDLES

De esta forma, podemos meter todos los plugins que queramos aplicar en nuestro zsh metiendo una línea nueva entre los dos EOBUNDLES.

Si queremos aplicar un tema pondremos esto:

antigen theme jdavis/zsh-files themes/jdavis

Y, por último, introducimos la línea que aplica todos los cambios:

antigen apply

Esto último es necesario al usar antigen bundles en lugar de una lista de antigen bundle. La diferencia es que con antigen bundles y luego antigen apply la carga de los plugins es mucho más rápida.

Muy interesante es la opción de actualizar todos los bundles (plugins) que tenéis en vuestro .zshrc. Se hace automática y sencillamente con este comando:

antigen update

Para actualizar el propio antigen usaremos este comando:

antigen selfupdate

Con esto ya deberíais tener vuestro zsh personalizado con plugins y temas chulos usando antigen. Si queréis más información, podéis mirar aquí pero, sobre todo, aquí.

Personalizando zsh: oh-my-zsh

En la anterior entrada os comenté que zsh es un intérprete de comandos para GNU/Linux (también para otras plataformas, como MAC OS) que permite, entre otras cosas, un nivel de personalización mucho más alto que bash.

Para este fin nació oh-my-zsh, que no es más que una aplicación (un framework en realidad) que permite personalizar fácilmente nuestro zsh.

Para ello consta de multitud de plugins y temas y permite adaptar el aspecto y funcionalidad de zsh a nuestras preferencias personales. Es una forma sencilla (*) de realizar cambios en la configuración de zsh.

Para instalarlo, nada más fácil:

$ wget --no-check-certificate http://install.ohmyz.sh -O - | sh

Una vez instalado simplemente editamos el fichero .zshrc, que tendremos en nuestro directorio home.

Para cambiar el tema del prompt modificaremos el parámetro ZSH_THEME. Por ejemplo:

ZSH_THEME=robbyrussell

Si no queremos ningún tema (estaría todo como antes de instalar oh-my-zsh) lo dejaremos así:

ZSH_THEME=""

Existe una lista de temas para poder aplicar en el prompt de nuestro shell favorito, la podéis encontrar en este enlace.

Como indican aquí, también es interesante usar el tema random, que lo que hace es ir cambiando de un tema a otro aleatoriamente. De esta forma podemos ir viéndolos todos y quedarnos al final con el que más nos guste.

Los plugins permiten añadir cosas interesantes, como autocompletado de parámetros de comandos. Por ejemplo, al escribir zypper  (instalador de paquetes de openSUSE) y a continuación escribís in y pulsáis tabulador, os dirá qué parámetros acepta.

Aquí tenéis una lista de los plugins que existen para oh-my-zsh.

Para añadir un plugin simplemente tenéis que añadir el nombre del plugin a la lista entre paréntesis que hay tras el parámetro «plugins» dentro del fichero .zshrc. Por ejemplo:

plugins=(rails git ruby)

Si conocéis más formas de usar oh-my-zsh para mejorar la experiencia con zsh sentíos libres de dejar un comentario.

 

(*) En una próxima entrega veremos una forma de personalizar zsh aún más sencilla que ésta :-O.

Pasando de bash a zsh

Hace tiempo oí hablar de zsh, un shell bastante potente que tenía peculiaridades que lo hacían, a priori, mejor o, al menos, más completo que el archiconocido bash.

Por cuestiones de tiempo no lo pude probar en su momento, pero no hace mucho me decidí a instalarlo y echarle un vistazo.

Realmente, una vez instalado, zsh (o Z shell) es muy parecido al bash, por lo que si el uso que le dais al terminal es ocasional no vais a notar mucha diferencia en primera instancia. De hecho, en estos casos casi que os recomiendo que ni lo instaléis, porque bash funciona perfectamente y las bondades de zsh son útiles para uno uso más intensivo.

La única excepción que veo a esto es que, aunque no uséis mucho la terminal, queráis darle un aspecto más chulo (más colorido, mostrando más datos, más personalizado), ya que estos menesteres con zsh no son complicados y los resultados son bastante decentes.

Si le dais más uso sí que le sacaréis mayor provecho ya que muchas de las funcionalidades que zsh incorpora y de las que bash carece (*).

Hay un documento (una presentación web) de visita obligada si queréis ver qué puede hacer zsh y que otros shells no puede, y es ésta. En ella se muestran cosas que puedes hacer en zsh y que, por ejemplo, en bash no se puede.

En ella muestran ejemplos prácticos de por qué os puede resultar muy útil sustituir vuestro intérprete de comandos actual por zsh. Os comento algunas interesantes:

  • El tabulador que se usa para completar un comando, si lo usáis tras introducirlo, os va a completar con los parámetros del comando. Por ejemplo, si ponéis zypper in y le dais al tabulador, os va a mostrar los distintos parámetros de zypper que comienzan con las letras in, como pueden ser info o install, por ejemplo.
  • Si accedéis a una ruta de directorios muy profunda, como por ejemplo:
/home/amms/un/directorio/cualquiera/pero/profundo

y queremos ir al directorio:

/home/amms/otro/directorio/cualquiera/pero/profundo

no hace falta que reescribamos la ruta completa, sino que podemos poner esto:

cd un otro

y lo que hará será sustituir en la ruta actual el directorio un por otro, ahorrándonos mucho tiempo y la molestia de tener que reescribirla por completo.

  • Existe la posibilidad de poner una cadena como prompt derecho. Podemos usar distintos parámetros para personalizarlo (también el izquierdo), pudiendo ser éstos la fecha, la hora, la ruta, el usuario, usar colores, etc.
  • Se pueden usar lo que se denominan alias globales. Ejemplo:
alias -g p='-ef | grep'

que es muy útil, al menos para mí.

Para instalarlo podéis usar el gestor de paquetes de vuestra distro, porque está en todas las distros conocidas (si no lo está, cambiad de distro, ¡ya!). Una vez instalado tenéis que especificar que queréis que éste sea vuestro shell por defecto. Para ello, ejecutáis como root:

chsh -s `which zsh` $USER

Si os animáis a instalarlo y tenéis alguna pega me podéis poner un comentario y lo vemos.

En otro artículo os hablaré de cómo personalizar fácilmente zsh (sí, me refiero a  usar cosas como oh-my-zsh o antigen).

(*) Realmente hay algunas cosas que sí que se pueden implementar en bash con funciones pero es un poco más rudimentario que zsh en general para aspectos de personalización y de funcionalidad práctica en general.