El editor que uso en mis servidores y no es NeoVim

Vistas: 0
0:00 / 0:00

A veces, hasta a los más entusiastas de la tecnología nos pasa: la Inteligencia Artificial nos satura un poco. Durante los últimos meses no he parado de hablarte de agentes inteligentes, de grandes modelos de lenguaje, de automatizaciones complejas y de cómo estoy mejorando a mi querido asistente Hermes. Aunque no he dejado de programarle novedades estupendas, como una base de datos vectorial para dotarle de una memoria a largo plazo alucinante, de vez en cuando mi mente me pide un descanso relativo de tanta red neuronal. Para mí, la mejor forma de desconectar y recuperar energías es volver a la esencia pura de la informática: abrir una terminal de Linux, ponerme a cacharrear a bajo nivel y escribir código útil para solucionar problemas del día a día.

Hoy quiero contarte por qué he decidido romper con mi propia rutina y empezar a usar un editor de texto modal diferente en mis servidores remotos. Además, te voy a presentar un puñado de herramientas que he programado estos últimos días en mi lenguaje de cabecera, Rust, que me ayudan a gestionar mis flujos de trabajo sin depender de pesados entornos gráficos ni de lenguajes interpretados que se rompen al actualizar el sistema. ¡Venga, acompáñame que vamos directos al turrón!

El dilema del editor de texto: por qué mi amado NeoVim no siempre es la mejor opción en el servidor

Quienes leéis este blog con frecuencia sabéis perfectamente que soy un enamorado de NeoVim. Es el editor de terminal en el que paso horas y horas picando código para todos los proyectos de atareao.es. Lo tengo ultra personalizado a mi gusto: cuento con más de cien complementos que he ido instalando y configurando a lo largo de los años. Gracias a esta configuración, disfruto de un explorador lateral de archivos precioso, una barra de estado que me da información en tiempo real, un buscador difuso de archivos inmediato y un sistema de autocompletado de código que no tiene nada que envidiar a las herramientas comerciales más pesadas.

Sin embargo, la realidad de la vida del administrador de sistemas es muy distinta cuando te conectas por SSH a un servidor remoto en la nube. Normalmente, estos servidores de producción funcionan con versiones de soporte a largo plazo de distribuciones como Ubuntu Server. La filosofía de estos sistemas es priorizar la estabilidad absoluta sobre las últimas novedades de software. Como consecuencia directa, la versión de NeoVim disponible en los repositorios oficiales de paquetes suele ser bastante antigua, a menudo con varios años de retraso respecto a la versión de desarrollo que utilizo en mi ordenador habitual.

¿Qué ocurre cuando intento trasladar mi configuración personal a uno de estos servidores? Que se desata el caos. Mis archivos de configuración escritos en Lua fallan estrepitosamente porque llaman a funciones que aún no existían en las versiones antiguas de NeoVim. Además, intentar descargar y compilar la última versión del editor en cada máquina remota, junto con la instalación de decenas de complementos, dependencias de Node.js, Python o utilidades de búsqueda externa, se convierte en una pesadilla de mantenimiento insostenible. Necesitaba una herramienta ligera, rápida y que no requiriera configurar absolutamente nada para ofrecerme una experiencia de edición moderna desde el primer segundo. Y esa herramienta es Helix.

Qué es Helix y por qué es el compañero ideal para tus servidores remotos

Helix es un editor de texto modal moderno, escrito en Rust y diseñado específicamente para la terminal. Su gran diferencia con editores clásicos como Vim o NeoVim reside en una filosofía muy clara: ofrecer una experiencia de desarrollo completa de serie, sin necesidad de que el usuario tenga que configurar un ecosistema complejo de complementos externos.

Cuando descargas el binario de Helix y lo ejecutas en cualquier servidor, te encuentras de inmediato con características avanzadas que en otros editores requerirían horas de configuración. Esto es posible gracias a que integra de manera nativa dos tecnologías fundamentales para el desarrollo de software actual:

El protocolo de servidor de lenguajes o LSP

Para que un editor sea capaz de entender lo que estás escribiendo, sugerirte correcciones, autocompletar tus funciones o mostrarte la documentación de una librería mientras tecleas, necesita comunicarse con un motor especializado en cada lenguaje de programación. Esto es lo que se conoce como Language Server Protocol o LSP. Helix incluye de forma nativa la compatibilidad con este protocolo para decenas de lenguajes de programación. Si en tu servidor tienes instalado el compilador de Rust, el intérprete de Python o el compilador de Go, Helix se conectará a ellos automáticamente para ofrecerte ayuda inteligente en tiempo real mientras editas tus archivos de configuración o scripts de administración.

El analizador sintáctico Tree-sitter

Los editores antiguos utilizaban expresiones regulares muy complejas para colorear el código. Este método tradicional es lento, consume muchos recursos del procesador y suele fallar cuando los archivos de código se vuelven demasiado extensos. Helix utiliza Tree-sitter, un motor de análisis sintáctico ultra rápido que genera un árbol de sintaxis estructurado de tu archivo en tiempo real. Gracias a esto, el resaltado de colores en Helix no solo es precioso, sino que el editor entiende perfectamente dónde empieza y dónde termina una función, un bucle o una variable, permitiéndote navegar por el código de forma estructural a una velocidad asombrosa.

La dura batalla contra mi propia memoria muscular

A pesar de todas las bondades de Helix, mi transición no ha sido un camino de rosas. El principal obstáculo al que me he enfrentado no ha sido técnico, sino físico: mi propia memoria muscular. Cuando llevas más de una década utilizando el lenguaje de Vim para editar texto, tus dedos se mueven de manera completamente autónoma. Escribes comandos sin pensar, de forma casi inconsciente.

Helix es un editor modal, lo que significa que tiene un modo normal para desplazarte por el texto y realizar acciones, y un modo de inserción para escribir. Hasta aquí, todo es idéntico a Vim. Sin embargo, la lógica interna de la edición en Helix es opuesta a la que diseñó Bill Joy para el editor de Unix original.

En Vim, el flujo de trabajo sigue la estructura de acción más objeto. Si quiero borrar una palabra entera, pulsa la combinación de teclas para borrar y luego la tecla para definir el objeto, por ejemplo, borrar dentro de la palabra. En cambio, en Helix la lógica se basa en selección más acción. Primero debes seleccionar el objeto visualmente en la pantalla y, una vez que ves resaltado exactamente lo que quieres modificar, pulsas la tecla para borrarlo o cambiarlo.

Este cambio conceptual me hace cortocircuitar el cerebro constantemente. Mis dedos intentan borrar antes de seleccionar, lo que resulta en pulsaciones de teclado erróneas y un pequeño momento de frustración. No obstante, una vez que te acostumbras a ver lo que vas a modificar antes de realizar la acción, te das cuenta de que es un método mucho más intuitivo y seguro, especialmente cuando realizas cambios críticos en archivos de configuración de servidores en producción.

Descubriendo el potencial de Helix en el día a día

Para ayudarte a dar los primeros pasos sin perderte, Helix incluye un tutorial interactivo fantástico al que puedes acceder escribiendo el comando tutor dentro del editor. Este tutorial te guiará paso a paso para aprender los movimientos básicos usando las teclas clásicas de cursor: la H para ir a la izquierda, la L para ir a la derecha, la K para subir y la J para bajar.

Una de las características nativas que más utilizo en Helix y que me parece una auténtica delicia es el cursor múltiple. Si pulsas la combinación de mayúsculas y la tecla C, Helix creará varios cursores verticales simultáneos. Esto te permite editar un listado de variables o un archivo de configuración en varias líneas de manera simultánea, viendo cómo se modifica el texto a la vez en toda la columna. Es una de esas funciones que, una vez que la descubres, te preguntas cómo has podido vivir tanto tiempo sin ella.

Además, el editor cuenta de forma nativa con la posibilidad de dividir la pantalla tanto en horizontal como en vertical con comandos tan sencillos como abrir una ventana dividida. Y si necesitas buscar un archivo dentro de tu proyecto, con pulsar la barra espaciadora seguida de la tecla F se abrirá un menú de búsqueda difusa inmediato que rastreará todo tu directorio en milisegundos. Todo ello funcionando a una velocidad endiablada y consumiendo apenas unos pocos megabytes de memoria RAM en tu servidor remoto.

Mi caja de herramientas personalizadas escritas en Rust

Aparte de mi experiencia con Helix, durante este retiro temporal de la Inteligencia Artificial me he dedicado a programar algunas utilidades en Rust para resolver tareas muy específicas que realizo constantemente desde la terminal.

A menudo me preguntan por qué insisto en reescribir herramientas en Rust cuando ya existen opciones similares en Python o Bash. La respuesta es muy sencilla: la estabilidad y la portabilidad de los binarios compilados.

Python es un lenguaje interpretado maravilloso, pero requiere que el servidor remoto tenga instalada la versión exacta del intérprete y de todas las librerías necesarias. Si una actualización del sistema operativo modifica una de esas librerías secundarias, tu script de Python puede dejar de funcionar de la noche a la mañana. Rust, al ser un lenguaje compilado, genera un único archivo binario independiente que contiene todo lo necesario para ejecutarse. Lo copias en tu servidor y funcionará eternamente, sin importar qué librerías del sistema se actualicen.

Aquí te detallo las cuatro utilidades que he estado puliendo con mucho mimo:

mkdr: un renderizador interactivo de Markdown para tu consola

Como todo el contenido de mi web, mis guiones de podcast y mis anotaciones técnicas están escritos en formato Markdown, paso gran parte del día leyendo este tipo de archivos. Existen utilidades excelentes en Linux como bat que colorean el texto plano, pero yo quería ir un paso más allá y disponer de una experiencia de lectura fluida en la terminal.

Para ello he desarrollado mkdr (Markdown Reader). Este programa analiza el archivo de texto plano y lo renderiza en pantalla aplicando un diseño limpio, resaltando los bloques de código fuente mediante analizadores sintácticos y permitiéndome hacer clic directamente sobre los enlaces externos utilizando las capacidades modernas de los emuladores de terminal.

Pero su característica estrella es el soporte para enlaces de tipo Wiki. Utilizo una base de datos de notas interconectadas donde los archivos se enlazan entre sí usando dobles corchetes. Con mkdr, si estoy leyendo una nota técnica sobre servidores de bases de datos y pulso sobre un enlace estilo wiki que apunta a un archivo sobre optimización de memoria, la herramienta cierra el documento actual y abre el nuevo de forma instantánea. Me permite navegar por toda mi documentación personal como si estuviera utilizando un navegador web privado dentro de la propia consola de comandos de mi servidor.

id3click: automatizando los metadatos de audio sin dependencias

Una de las tareas más rutinarias tras grabar un episodio de mi podcast es rellenar las etiquetas de metadatos del archivo de audio MP3 para que los reproductores de podcast muestren correctamente el nombre del episodio, el autor, el año, el número de temporada y, por supuesto, la carátula visual del capítulo.

Durante mucho tiempo utilicé un script propio escrito en Python para automatizar este tedioso proceso. Sin embargo, hace un par de semanas una actualización profunda del sistema en mi ordenador de escritorio principal con Arch Linux rompió las dependencias de la librería de tratamiento de audio que usaba mi script. En lugar de perder el tiempo peleando con entornos virtuales de Python para solucionar el problema, decidí que era el momento perfecto para escribir mi propio gestor de etiquetas de audio en Rust.

El resultado es id3click, una utilidad increíblemente rápida y robusta que me permite ver, añadir, modificar o eliminar metadatos ID3 de archivos de audio de forma masiva en milisegundos. Además, le he diseñado una salida visual preciosa que utiliza emoticonos para identificar cada campo (título, artista, copyright) haciendo que trabajar con ella en la terminal sea una experiencia muy amena.

raslet: dando voz a Cloe mediante la API de Microsoft Edge

Para interactuar con mi asistente de Inteligencia Artificial Cloe, necesitaba proporcionarle un sistema de voz realista que convirtiera las respuestas de texto en archivos de audio audibles. Aunque existen muchos motores de síntesis de voz, la mayoría de ellos son bastante limitados o generan voces excesivamente robóticas que resultan molestas tras unos minutos de escucha.

Para solucionar esto, he creado raslet, una pequeña herramienta escrita en Rust que actúa como un cliente externo para conectarse a la API gratuita de síntesis de voz de Microsoft Edge. Esta API ofrece algunas de las voces en español más naturales y fluidas del mercado actual.

La gran ventaja de raslet sobre los pocos clientes que existen para esta API es que me permite tener un control absoluto sobre el archivo de audio resultante. Puedo enviarle textos simples o instrucciones estructuradas en lenguaje de marcado de síntesis de voz y regular al milímetro la velocidad de la locución, el tono del habla o el volumen de salida. Esto es fundamental para lograr que Cloe hable de forma pausada y natural, en lugar de parecer que tiene prisa por terminar sus explicaciones.

susurros: síntesis de voz local y privada

¿Qué ocurre si el servidor donde tengo alojado mi asistente pierde temporalmente la conexión a internet o si quiero realizar pruebas procesando textos de carácter confidencial que no quiero enviar a servidores de terceros bajo ningún concepto? Para cubrir esta necesidad de privacidad absoluta, he programado una herramienta complementaria llamada susurros.

A diferencia de raslet, esta herramienta procesa el texto y genera el archivo de audio MP3 de forma completamente local en tu propia máquina utilizando modelos de síntesis de voz offline integrados en el código de Rust. No envía un solo byte de información fuera de tu ordenador. El único inconveniente de este enfoque es que consume bastantes recursos del procesador local, por lo que el tiempo que tarda en generar el archivo de voz depende de la potencia de la CPU de tu servidor. Sin embargo, la seguridad de contar con un sistema totalmente autónomo y privado no tiene precio.

Romper con la rutina y explorar nuevos caminos

Salir de nuestra zona de confort tecnológica de vez en cuando es sumamente saludable. Nos ayuda a mantener la mente despierta, a aprender nuevas lógicas de diseño y a darnos cuenta de que hay vida más allá de las herramientas que usamos por pura inercia en el día a día.

Helix me ha demostrado que se puede editar texto de manera modal de una forma diferente y sumamente eficiente en servidores remotos sin la pesada carga de arrastrar cientos de complementos. Por su parte, desarrollar mis propias herramientas de terminal en Rust me permite disfrutar de la informática en su estado más puro, creando programas pequeños, rápidos y robustos que solucionan problemas reales de forma definitiva.

Te animo a que tú también busques ese momento para romper con tus rutinas informáticas, instales ese software que te da cierta pereza aprender o te animes a programar esa pequeña utilidad de consola que siempre has querido tener. Te aseguro que te lo vas a pasar pipa.


Deja una respuesta