3 buenas razones para reemplazar Bash por Zsh 1

3 buenas razones para reemplazar Bash por Zsh

Índice
  1. Una gran ecosistema de plugins para resolver miles de problemas
  2. Asistencia inteligente de comandos con completaciones de primer nivel
  3. Edición inteligente de líneas de comandos con Zsh
  4. La línea de comandos no es solo sobre ingresar comandos
    1. El ZLE es poderoso

Descubre cómo Zsh transforma tu experiencia en la terminal con un ecosistema de plugins robusto y completas funciones de asistente, optimizando tu flujo de trabajo y productividad.

Si usas la terminal con frecuencia, probablemente comprendas el dolor habitual de tener que escribir comandos largos. La finalización de tabulaciones 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.

Una gran ecosistema de plugins para resolver miles de problemas

Utilizar shells en su estado predeterminado es una experiencia engorrosa porque invariablemente carecen de las funciones útiles y ergonómicas que necesitamos para ser verdaderamente 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, una forma es editar directamente nuestros archivos de configuración de shell y añadir funciones utilitarias personalizadas. Por ejemplo, puedes insertar alias o funciones en tu archivo de configuración de shell, y estas se convierten en adiciones permanentes a tu entorno de shell.

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

El ejemplo anterior te dará una función utilitaria reutilizable llamada "foo" que imprimirá solo un mensaje básico; puedes usarla como un comando. Sin embargo, si bien editar tu shell es algo común e incluso 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 utilizar plugins. Los plugins son simplemente paquetes compuestos de funciones de shell, escritos, probados y publicados por alguien más, así que todo el trabajo duro ya está hecho por ti. Para instalar plugins, normalmente usarías un marco de shell, que a su vez está compuesto por 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 a menudo recomiendan 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 entre los que seleccionar, todos los cuales resuelven un problema que alguien tuvo alguna vez. Pasar un poco de tiempo navegando por plugins puede conducir a ganancias significativas de eficiencia a largo plazo, lo que lo convierte en una inversión valiosa. En lugar de navegar por 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ó previamente, escribir un comando largo solo para que el shell devuelva un error es una pérdida de tiempo y frustrante. Necesitamos barandillas para mantener nuestras torpes acciones humanas en el 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. Si bien 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% correcto con la ortografía.

Construir comandos es puramente práctico, y no es una obra de arte, así que las características del shell deberían orientarse hacia hacer que sea lo más eficiente posible. Zsh hace un trabajo excepcional al ofrecer un excelente soporte de completación de comandos. No podría usar un shell durante mucho tiempo si su sistema de completaciones no está a la altura de lo que ofrece Zsh.

Edición inteligente de líneas de comandos con Zsh

La línea de comandos no es solo sobre ingresar comandos

La línea de comandos no se trata solo de ingresar comandos; a menudo se trata también de editarlos. Tanto Zsh como Bash tienen editores de línea de comandos competentes que proporcionan 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 los enlaces de teclas de Emacs o Vi, haciendo que editar comandos se sienta más como usar un editor de texto. Readline es configurable, pero no es extensible sin escribir código C personalizado. El Editor de Línea Zsh (ZLE) adopta un enfoque diferente porque es extensible a través de scripts de shell. La extensibilidad de ZLE permite potentes características impulsadas por la comunidad, como el resaltado de sintaxis y widgets personalizados, además de soportar enlaces de teclas al estilo de Emacs y Vi.

Los widgets (en mi opinión) son donde ZLE realmente brilla. Un widget es simplemente una función de shell que se activa típicamente 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.

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

git commit --all --message "hacer muchos errores"

Después de escribir "git commit --all --message" una docena de veces, la repetición comienza a desgastarme. Por eso utilizo 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

Pongo 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 luego lo envuelve en un comando "git commit --all --message" para mí. Esto me ahorra mucha energía a largo plazo.

El segundo widget elige una ruta del sistema de archivos utilizando un administrador de archivos en lugar de escribirla. Es tedioso escribir largas rutas de archivos, especialmente cuando se navega 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 escribo un comando y necesito una ruta, puedo presionar Alt+Y, y se abrirá una ventana del administrador 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 de ingresar comandos. El sistema ZLE es poderoso, y con un poco de conocimiento de scripting de shell, puedes hacer que los comandos difíciles sean mucho más fáciles de escribir. Es una de esas características que hace 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 poderosos 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 por 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