guides

Migrar de la configuración YAML de Espanso a un expansor de texto con GUI

Por Equipo Lightning Assist14 de septiembre de 20269 min de lectura
espansoyamlmigrationguitext-expanderlinuxwindowsmacos
Compartir:

Respuesta rápida: Espanso almacena cada snippet como un par trigger/replace dentro de archivos YAML de coincidencias (~/.config/espanso/match/*.yml), lo que significa que añadir o editar un snippet implica abrir un editor de texto, respetar las reglas de indentación YAML y reiniciar el servicio para probarlo. Migrar a un expansor de texto con GUI como Lightning Assist convierte cada coincidencia en un snippet en un editor visual: el mismo texto disparador, la misma expansión, pero un campo de formulario en lugar de un archivo. Desde Lightning Assist 2.6 los archivos match pueden importarse directamente: selecciona el .yml y cada par trigger/replace se convierte en un snippet, con {{date}}, {{clipboard}} y variables de formulario convertidas en marcadores de posición. Solo las coincidencias con comandos shell y regex requieren revisión manual.

Divulgación: creamos Lightning Assist, un expansor de texto de pago, así que Espanso es competidor nuestro. Espanso es gratuito y de código abierto, y todas las soluciones de abajo son para Espanso mismo: ninguna exige cambiar de herramienta.

Si nunca has abierto ~/.config/espanso/match/base.yml, nada de esto te dirá mucho, y esa es exactamente la audiencia de esta guía: personas que consiguieron que Espanso funcionara, añadieron una docena de snippets, y ahora se preguntan si existe una versión de esto donde no tengan que pensar en YAML en absoluto.

Por qué la configuración YAML de Espanso se vuelve una fricción

Espanso está genuinamente bien construido. Es gratuito, de código abierto, multiplataforma, y su modelo basado en archivos es una decisión de diseño deliberada, no un descuido: YAML es portátil, permite diffs y es programable. La fricción aparece más tarde, cuando ya lo usas día a día:

Archivos de coincidencias repartidos por tu sistema de archivos. Espanso organiza la configuración en una carpeta match/ (qué expandir) y una carpeta config/ (cómo se comporta la expansión), partiendo de match/base.yml. A medida que crece tu número de snippets, o sigues añadiendo a ese único archivo o empiezas a dividir en más archivos .yml; de cualquier forma, encontrar "el de precios" seis meses después significa abrir archivos y revisarlos, porque no hay un cuadro de búsqueda.

La indentación es la sintaxis. Un match básico se ve así:

matches:
  - trigger: ":br"
    replace: "Best Regards,\nJon Snow"

La propia documentación de Espanso es tajante al respecto: "Make sure to include the indentation, otherwise it won't be valid YAML syntax." Eso está bien para alguien cómodo en un editor de texto, y es exactamente el tipo de cosa que se rompe en silencio cuando pegas un snippet desde Slack, o copias un bloque de varias líneas y el espacio en blanco no viene con él. Normalmente te enteras porque el disparador simplemente no expande: sin diálogo, sin subrayado rojo, solo un snippet que no hace nada en silencio hasta que sales a cazar un espacio perdido.

Sin sincronización, sin equipo. Espanso guarda todo localmente por diseño, algo genuinamente bueno para la privacidad, pero significa que llevar tus snippets a una segunda máquina es una copia manual de archivos, una carpeta de Dropbox, o un repositorio git personal que mantienes tú mismo. No hay cuenta, no hay sincronización multidispositivo integrada, y no hay forma de pasarle tu biblioteca de snippets a un compañero salvo enviándole los archivos .yml y pidiéndole que los coloque en la carpeta correcta.

Reiniciar para probar. Editar un archivo de coincidencias y confirmar que funcionó normalmente implica: guardar, volver a la app donde estás probando, escribir el disparador y, si no se activa, volver al archivo a revisar. Es un bucle corto, pero es un bucle que repites en cada cambio, indefinidamente.

Nada de esto convierte a Espanso en mal software. Lo convierte en software hecho para gente cómoda tratando la configuración como código. Si no es así como quieres pasar tu tiempo, la solución es una GUI, no un editor YAML "mejor".

Cómo es realmente el equivalente en GUI

En un expansor de texto con GUI, un snippet es una fila, no un archivo. Abres un panel (en Lightning Assist se llama "My Snippets"), haces clic en "Create Snippet", escribes el disparador en un campo y la expansión en otro, y guardas. No hay archivo que localizar, ningún servicio que reiniciar, y ninguna indentación que acertar, porque no hay indentación: el texto enriquecido, el formato HTML y el contenido de varias líneas se escriben o pegan directamente en el campo de expansión sin necesidad de escapado. Los snippets se organizan en carpetas que tú nombras, y puedes buscar en toda tu biblioteca en lugar de revisar archivos.

La contrapartida es la esperable: renuncias al acceso directo a archivos (nada de diffs de git sobre tu historial de snippets, nada de editar en Vim) a cambio de no necesitar para nada la mecánica de YAML.

Espanso → Lightning Assist: mapa de conceptos

Si ya piensas en el vocabulario de Espanso, así es como se traduce cada pieza:

Concepto de Espanso En YAML Equivalente en GUI
Match Una entrada bajo matches: en un archivo .yml Un snippet: una fila en el panel de Snippets
Trigger trigger: ":br" El campo Trigger: escribe la misma abreviatura directamente, sin necesidad de dos puntos salvo que quieras conservarlos
Replace replace: "Best Regards,\nJon Snow" El texto de expansión del snippet: texto enriquecido, HTML y contenido de varias líneas compatibles de forma nativa
Vars / extensions (fecha, shell, portapapeles, formulario) Un bloque vars: que referencia un tipo de variable Marcadores de posición insertados en la expansión: [#Date#] y [#Name#]
Archivos de coincidencias (base.yml, .yml personalizados) Archivos dentro de ~/.config/espanso/match/ Carpetas en el panel de Snippets: organización visual en lugar de por nombre de archivo
Recargar / espanso restart Reinicio manual del servicio para aplicar cambios Nada que hacer: los snippets están activos en cuanto guardas
Triggers con regex, matches con comandos de shell YAML + scripting, específico de Espanso No replicado. Si esto es central en tu flujo de trabajo, quédate con Espanso para estos casos

Esa última fila importa: esta es una guía de migración, no una afirmación de que "Lightning Assist puede hacer todo lo que hace Espanso". Los triggers basados en patrones regex y los matches respaldados por comandos de shell son puntos fuertes genuinos de Espanso sin equivalente en GUI aquí.

Paso a paso: importar tus archivos match

Actualizado el 7 de septiembre de 2026: Lightning Assist ahora importa directamente los archivos match de Espanso, por lo que ya no es necesario recrearlos uno a uno como describía esta guía.

  1. Localiza tus coincidencias existentes. Ejecuta espanso path y abre la carpeta match que indica (normalmente ~/.config/espanso/match/). Cada archivo .yml con una lista matches: puede importarse tal cual; no necesitas fusionarlos antes.
  2. Instala el expansor GUI y omite cualquier archivo de configuración. Prueba Lightning Assist gratis durante 14 días — sin tarjeta de crédito. La app se abre directamente en su panel de snippets; no hay archivo de configuración que crear primero.
  3. Importa cada archivo match. En My Snippets, haz clic en Importar y selecciona el archivo .yml. Cada coincidencia se convierte en un snippet: trigger (o la primera entrada de triggers) es el disparador, replace la expansión, y label el nombre del snippet si está presente. Se mantienen los símbolos iniciales, así que :br sigue siendo :br. La importación está disponible en todos los planes. En el plan gratuito cada importación trae hasta 5 coincidencias y la biblioteca permite 20; la prueba de 14 días eleva el límite a 20 por importación, y Pro elimina ambos límites. Lo que quede fuera se lista, no se descarta silenciosamente.
  4. Revisa las variables. Las variables {{date}}, {{clipboard}} y {{form.field}} se convierten en los marcadores correspondientes, como [#date#] y [#clipboard#]. Lo que el importador no pueda traducir — variables de comandos shell, scripts, disparadores regex — se deja visible en el texto de expansión en lugar de eliminarse, para que puedas verlo y corregirlo. Si son esenciales para una coincidencia, déjala en Espanso.
  5. Configura tu modo de disparo. La expansión al escribir (escribe el disparador y se expande en línea) es la opción predeterminada y no requiere configuración. Si prefieres pulsar una tecla tras escribir el disparador, configúralo una vez en Ajustes → Disparadores.
  6. Prueba antes de borrar nada. Prueba cada snippet en un documento de prueba. Mantén tu configuración de Espanso hasta confirmar que el conjunto migrado funciona como esperas — no hay problema en tener ambos coexistiendo temporalmente.

La importación en sí toma segundos; el tiempo se invierte en el paso 4, revisando coincidencias con comandos shell o regex. Para una biblioteca típica de coincidencias de texto plano, toda la migración lleva unos minutos.

Lo que ganas y lo que pierdes

Lo que ganas: nada de archivos de configuración, sin ciclos de reinicio para probar, una biblioteca de snippets buscable y organizada en carpetas, comandos AI que reescriben o traducen texto seleccionado desde un atajo, dictado push-to-talk en la misma app, sincronización automática en la nube entre dispositivos y compartición de snippets en equipo si lo necesitas. Todo esto funciona en Windows, macOS y Linux desde la misma cuenta.

Lo que pierdes: Espanso es gratuito y de código abierto para siempre — Lightning Assist también es gratuito e ilimitado, con hasta 20 snippets, carpetas y un equipo incluidos — pero una biblioteca más grande y más equipos cuestan $5.99/mes tras una prueba de 14 días (el plan Pro incluye un crédito mensual de AI para comandos y voz). También pierdes disparadores basados en regex y coincidencias con comandos shell, que no tienen equivalente en el modelo GUI. Si esos son motivos para usar Espanso, esta migración no es para ti — y es una razón legítima para quedarte.

Si quieres una GUI sin salir del ecosistema Espanso por completo, existen proyectos comunitarios — espansoGUI (Rust/Iced, en Flathub), EspansoEdit (software gratuito para Windows) y el EspansoGUI IDE. Merecen la pena probarlos, pero cada uno es una capa separada mantenida por voluntarios sobre los mismos archivos YAML; Espanso en sí no tiene GUI oficial más allá de su ventana de búsqueda (la última versión estable del proyecto principal es la v2.4.1, 2 de septiembre de 2026). Si lo que quieres es una herramienta donde la GUI sea el producto, esta migración cubre esa necesidad.

Preguntas frecuentes

¿Puedo importar directamente mis archivos YAML de Espanso?

Sí. En My Snippets, haz clic en Importar y selecciona un archivo match (.yml). Cada par trigger/replace se convierte en un snippet, label en el nombre, y {{date}}, {{clipboard}} y campos de formulario en marcadores de posición. Las variables de comandos shell y disparadores regex no tienen equivalente y se dejan como texto visible para que los revises.

¿Perderé mis disparadores basados en regex o coincidencias con comandos shell?

Sí. Son capacidades específicas de Espanso basadas en su modelo YAML/scripting, y aquí no tienen equivalente en GUI. Si los disparadores regex o coincidencias con comandos shell son centrales en tu configuración, sigue usando Espanso para ellos y considera un expansor GUI solo para tus snippets más simples y estáticos.

¿Puedo conservar el mismo texto disparador, como :br o /addr?

Sí. El campo Trigger acepta cualquier texto que escribas, incluyendo un : o / inicial si esa es tu convención. No hay nada que te obligue a cambiar tu estilo de abreviatura durante la migración.

¿Existe una GUI oficial de Espanso que deba probar antes de cambiar de herramienta?

No oficial. Proyectos comunitarios como espansoGUI, EspansoEdit y el EspansoGUI IDE añaden una capa gráfica, pero son herramientas separadas mantenidas por voluntarios sobre los mismos archivos YAML — sigues un paso alejado de la configuración en crudo. Si quieres que la GUI sea el producto completo y no un añadido, esa es la diferencia que cubre esta migración.

Lecturas relacionadas

Fuentes