3 buenas razones para reemplazar Bash con Zsh 1

3 buenas razones para reemplazar Bash con Zsh

Índice
  1. Un vasto plugin ecosistema para resolver miles de problemas
  2. Asistencia inteligente de comandos con completaciones de primer nivel
  3. Edición inteligente de la línea de comandos con Zsh
    1. El ZLE es poderoso

Descubre cómo Zsh transforma tu experiencia en la terminal con un ecosistema de plugins robusto, asistencia inteligente en comandos y edición avanzada para maximizar tu productividad.

Si usas la terminal con frecuencia, probablemente entiendes el dolor de tener que escribir comandos largos. La autocompletación de Bash es ineficaz, las rutas de archivos son tediosas de escribir y los errores tipográficos son una molestia persistente. Tengo tres buenas razones por las que Zsh aborda estos problemas y mejora tu flujo de trabajo en la terminal.

Un vasto plugin ecosistema para resolver miles de problemas

Usar shells en su estado predeterminado es una experiencia engorrosa porque inevitablemente carecen de las características útiles y ergonómicas que necesitamos para ser realmente productivos. Por ejemplo, escribir comandos largos puede ser laborioso y poco indulgente cuando cometes errores. Necesitamos una forma de aumentar funcionalmente las capacidades de nuestros shells básicos y proporcionarles características que los hagan significativamente más fáciles de usar.

Para dotar a nuestros shells de capacidades adicionales, un enfoque es editar directamente nuestros archivos de configuración del shell y agregar funciones de utilidad personalizadas. Por ejemplo, puedes insertar alias o funciones en tu archivo de configuración del shell, y se convierten en adiciones permanentes a tu entorno de shell.

foo() {
 echo "Esta es la función foo"
}

El ejemplo anterior te proporcionará una función de utilidad reutilizable llamada "foo" que solo imprimirá un mensaje básico; puedes usarla como un comando. Sin embargo, aunque editar tu shell es común y hasta necesario para herramientas personalizadas, es un enfoque muy manual y potencialmente más trabajo del que estás dispuesto a realizar a largo plazo.

Otro enfoque (y a menudo mejor) es usar plugins. Los plugins son simplemente paquetes compuestos de funciones de shell, escritas, probadas y publicadas por otra persona, por lo que todo el trabajo duro ya está hecho para ti. Para instalar plugins, generalmente usarías un marco de shell, que en sí mismo está compuesto de funciones de shell. Un marco de shell inicializará tu entorno de shell, facilitará la instalación y activación de plugins, y a menudo proporcionará características adicionales.

Zsh fue el primer shell en establecer un ecosistema adecuado de plugins con un marco conocido como Oh My Zsh. Después de muchos años, el ecosistema de Zsh ha madurado hasta el punto en que hay miles de plugins, temas y marcos. Muchas personas suelen recomendar Oh My Zsh, pero yo prefiero Zinit por su enfoque en un tiempo de inicio rápido, que es de solo milisegundos.

Cualquiera que sea el marco que elijas, hay una abundancia de plugins de Zsh para seleccionar, todos los cuales resuelven un problema que alguien alguna vez tuvo. Pasar un poco de tiempo buscando plugins puede llevar a ganancias significativas de eficiencia a largo plazo, convirtiéndolo en una inversión que vale la pena. En lugar de navegar en YouTube, a menudo busco plugins, cambiando la procrastinación por ganancias en productividad.

Asistencia inteligente de comandos con completaciones de primer nivel

Como se mencionó anteriormente, escribir un comando largo solo para que el shell devuelva un error es una pérdida de tiempo y frustrante. Necesitamos barandillas que mantengan nuestras torpes acciones humanas en el buen camino, y eso es exactamente lo que hacen las completaciones de shell. Cuando escribes un comando y presionas la tecla Tab, el shell listará todas las opciones disponibles.

Bash proporciona completaciones de shell, pero el proceso de selección es terco, a menudo requiriendo que presione la tecla Tab de 10 a 15 veces para completar una sola opción. Aunque las completaciones de Zsh son mejores por defecto, los plugins y marcos aumentan significativamente sus capacidades.

Las imágenes anteriores muestran las completaciones de Zsh aumentadas con un plugin que aprovecha la utilidad fzf. Fzf es una utilidad indispensable que te permite reducir tus selecciones en tiempo real usando búsqueda aproximada. Cuando se utiliza con completaciones, tu entrada no necesita ser completamente correcta, y fzf aún te ayudará a encontrar la opción relevante. Eso es útil cuando estás escribiendo docenas de comandos en rápida sucesión y no te tomas el tiempo para ser 100% exacto con la ortografía.

Construir comandos es puramente práctico y no es una obra de arte, por lo que las características del shell deben orientarse a hacer que sea lo más eficiente posible. Zsh hace un trabajo excelente en eso a través de un excelente soporte para la completación de comandos. No podría usar un shell por mucho tiempo si su sistema de completación no está a la altura de la oferta de Zsh.

Edición inteligente de la línea de comandos con Zsh

La línea de comandos no se trata solo de introducir comandos; a menudo también implica editarlos. Tanto Zsh como Bash cuentan con editores de línea de comandos competentes que ofrecen controles avanzados para manipular el texto del comando antes de ingresarlo.

Bash utiliza GNU Readline, un editor de línea de comandos general utilizado por muchos proyectos de software diferentes. Te permite editar la línea de comandos utilizando atajos de teclado de Emacs o Vi, lo que hace que la edición de comandos se sienta más como usar un editor de texto. Readline es configurable, pero no es extensible sin escribir código en C personalizado. El Editor de Línea de Zsh (ZLE) adopta un enfoque diferente porque es extensible a través de scripts de shell. La extensibilidad de ZLE permite características potentes impulsadas por la comunidad, como el resaltado de sintaxis y widgets personalizados, además de soportar atajos de teclado estilo Emacs y Vi.

Los widgets (en mi opinión) son donde ZLE realmente brilla. Un widget es simplemente una función de shell que generalmente se activa a través de un atajo de teclado. Los widgets tienen acceso al texto de la línea de comandos y te permiten ejecutar cualquier comando de shell sobre él antes de aceptar el comando. Esto abre un mundo de oportunidades para hacer que tu flujo de trabajo sea un poco menos doloroso.

Mis dos widgets favoritos hacen que los cambios de Git (un rastreador de código fuente) y la selección de archivos sean menos engorrosos.

Utilizo frecuentemente Git para rastrear y revisar cambios en el código fuente. Mi primer widget simplifica el comando de commit. Hacer commits en Git es una tarea frecuente, y teclear todo el comando cada vez, incluyendo un mensaje descriptivo, se hace cansado:

git commit --all --message "make lots of bugs"

Después de escribir "git commit --all --message" una docena de veces, la repetición comienza a desgastarme. Por eso uso el siguiente widget.

git_commit_with_message() {
 local msg=$BUFFER
 BUFFER="git commit --all --message \"${msg}\""
 zle accept-line
}
zle -N git_commit_with_message
bindkey "\e^M" git_commit_with_message

Coloco la función de shell anterior en mi .zshrc y la recargo. Luego puedo hacer un commit de Git escribiendo un mensaje descriptivo y presionando Alt+Enter. El widget lo envuelve en un comando "git commit --all --message" por mí. Esto me ahorra mucha energía a largo plazo.

El segundo widget selecciona una ruta del sistema de archivos utilizando un gestor de archivos en lugar de teclearla. Es tedioso escribir rutas de archivos largas, especialmente cuando navegas por estructuras de directorios profundas.

yazi_pick_path() {
 local file=$(yazi --chooser-file=>(cat))

 [[ -z "$file" ]] && zle redisplay && return

 LBUFFER+="\"$file\""
 zle redisplay
}

zle -N yazi_pick_path
bindkey '\ey' yazi_pick_path

Ahora, cuando tecleo un comando y necesito una ruta, puedo presionar Alt+Y, y se abrirá una ventana del gestor de archivos Yazi en la terminal. Cuando selecciono un archivo o directorio y presiono enter, Yazi insertará una ruta entre comillas en la línea de comandos por mí.

El ZLE es poderoso

Estos widgets me permiten eliminar los elementos laboriosos al ingresar comandos. El sistema ZLE es potente, y con un poco de conocimiento de scripting de shell, puedes hacer que los comandos difíciles sean mucho más fáciles de teclear. Es una de esas características que hacen que Zsh se sienta verdaderamente extensible.

Si bien Bash tiene marcos populares (Bash-it y Oh My Bash) que vienen con algunos complementos útiles, no creo que sus ofertas se comparen con el ecosistema de Zsh. Además, Zsh también ofrece sistemas de completado y edición de línea mucho más avanzados. Estos tres sistemas potentes me permiten aprovechar el trabajo de otras personas y personalizar mi entorno de una manera que encuentro difícil de hacer con Bash.

Si deseas encontrar artículos similares a 3 buenas razones para reemplazar Bash con Zsh, te sugerimos revisar la categoría Linux.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir