Soy una de esas personas que abre inmediatamente una ventana de terminal después de que se inicie mi computadora. No es por necesidad en este momento, pero el hábito está ahí. Pasé la mayor parte de mi carrera aprendiendo sus encantamientos mágicos, y encuentro que navegar a través de mis tareas diarias en la terminal hace que sea un día más agradable en el trabajo. Dicho esto, es bueno probar algo nuevo de vez en cuando.
Recientemente dejé de lado el intérprete de línea de comandos predeterminado, Bash, en favor de fish, que orgullosamente se promociona como «un shell de línea de comandos para los años 90».
Encontré eso .bashrc no es suficiente
Hace poco más de un año decidí dejar de abstraer mis sistemas operativos y empezar a aprenderlo desde cero. Recientemente cambié de Mac a Linux, lo que me dio una razón para buscar la portabilidad de mis archivos de puntos al nuevo entorno. Fue refrescante; Encontré un montón de atajos confusos y duplicación y los emparejé con algo que se conecta bien entre sistemas operativos. Aquí hay algunos favoritos:
## Nicer shell experience
export GREP_OPTIONS="--color=auto"; # make grep colorful
export LSCOLORS=gxfxbEaEBxxEhEhBaDaCaD; # make ls more colorful as well
export HISTSIZE=32768; # Larger bash history (allow 32³ entries; default is 500)
export HISTFILESIZE=$HISTSIZE;
export HISTCONTROL=ignoredups; # Remove duplicates from history. I use `git status` a lot.
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"; # Make some commands not show up in history
export LANG="en_US.UTF-8"; # Language formatting is still important
export LC_ALL="en_US.UTF-8"; # byte-wise sorting and force language for those pesky apps
export MANPAGER="less -X"; # Less is more
export GPG_TTY=$(tty); # for gpg key management
He estado en un viaje para desmitificar la magia de mi entorno, y está empezando a tener más sentido.
La personalización rompe mi .bashrc
Es en este punto de claridad que me quedé atascado de nuevo. Quiero algunas convenciones modernas en mi terminal, especialmente sugerencias automáticas, resaltado de sintaxis y colorización de salidas de comandos sin demasiadas dependencias, y me gustaría que esa configuración fuera independiente de cualquier intérprete de línea de comandos que esté ejecutando. (iTerm2 es genial en un Mac, pero no quiero rastrear su archivo de configuración críptico en mis archivos de puntos. Entonces, ¿qué debo hacer?
La primera vez que fui tras una respuesta, la resolví paso a paso:
- Primero, personalizé mi ~/.archivo inputrc para permitir la búsqueda hacia adelante y hacia atrás.
- Luego, reemplazé cat con la salida embellecida de ccat y un alias de cat a ccat en mi .bashrc. Esto más tarde, finalmente, rompió la escritura a salida estándar en algunos casos, así que dejé de usarla.
- En última instancia, utilicé Bash-it, que es un potente sistema de complementos para personalizar Bash.
Después de pelar las piezas una por una, sentí que entendía un poco más sobre cómo funcionaba mi sistema. Los aros que sentí que tenía que saltar para obtener la experiencia moderna que buscaba me llevaron de vuelta a los estándares que me llevaron a este punto. Me sentí prisionera de la historia hasta que decidí tirarlo todo a la basura y probar algo totalmente diferente.
Fácil configuración predeterminada y personalización con fish shell
Fish shell es una moderna interfaz de línea de comandos con sugerencias automáticas, finalización de pestañas y resaltado de sintaxis (entre otras características). Me gusta especialmente cómo desde la primera vez que lo intentas escribiendo fish, obtienes una hermosa experiencia:
En la primera línea, el comando es azul porque pwd es un comando válido. En la segunda línea, es rojo porque pdw no es un comando válido. Presioné Enter para mostrar que es cierto, pero pude haber corregido rápidamente el error y seguir adelante con mi día. En el tercer comando, quiero cambiar el directorio (cd) a mi carpeta de desarrollo, y fish pregunta automáticamente si quiero saltar a mis archivos de puntos, como hice la última vez. Cuando presiono Tab dos veces, muestra otras opciones en el mismo directorio, tal y como esperaba.
Si quiero personalizar mi experiencia de concha de pez, no necesito instalar ninguna biblioteca o marco adicional para hacerlo. Fish se envía con el comando fish_config, que lanza una interfaz gráfica de usuario (GUI) donde puede elegir diferentes colores y configuraciones de solicitud.
Lo que es más impresionante es que también puede revisar todas las funciones, variables, enlaces y más disponibles desde la interfaz gráfica de usuario:
Si ajusta su configuración, todas las personalizaciones se almacenan en el mismo lugar: ~/.config/pescado. La captura de pantalla de arriba muestra que hice una función personalizada que me permite activar fácilmente un entorno Python usando pyenv. Consulte el tutorial sobre funciones fish para obtener más información.
Aviso: fish no es como Bash
Al probar otras conchas, descubrí que siempre había algunas diferencias que necesitaba afinar, pero me resultaban familiares en general. Ese no es el caso de los peces. La definición de funciones, el alias y las variables funcionan de manera un poco diferente. Hay estrategias útiles para la conversión .bashrc y .archivos bash_profile en la configuración de fish, pero es más de lo que cubriré en este artículo. Por lo tanto, aunque me encanta el pescado, recomiendo dar una vuelta por el tutorial interactivo para ver si te gusta.
Pruebe fish con una hermosa concha predeterminada
Disfruto de comenzar el día abriendo la terminal, y lo disfruto aún más desde que cambié a la concha de pescado. Me ha permitido dejar de preocuparme por lo que hay en Bash para centrarme en el código que planeo escribir. Si está buscando alejarse de los retoques con su terminal y centrarse más en el código, pruébelo. Usa chsh para configurarlo como tu shell predeterminado, y hazme saber cómo va en los comentarios.