Neovim incorpora vim.async para una concurrencia estructurada en Lua
La nueva biblioteca vim.async lleva la gestión de tareas asíncronas al núcleo de Neovim, reduciendo callbacks y mejorando la estabilidad del editor.

Neovim ha introducido vim.async, una biblioteca de concurrencia estructurada dentro de su estándar Lua. Con ella, los plugins pueden lanzar tareas asíncronas mediante vim.async.run() y suspenderlas con vim.async.await(), sin bloquear el bucle de eventos principal.
El modelo se basa en corutinas stackful y mantiene relaciones padre‑hijo claras: cualquier tarea hija se adjunta al alcance del padre y el padre solo se resuelve cuando todas sus hijas terminan. Si una hija lanza una excepción no capturada, ésta se propaga al padre, provocando la cancelación de los hermanos, a menos que la tarea se haya aislado explícitamente. Para procesos que deben sobrevivir al contexto original, Task:detach() los promueve a tareas de nivel superior.
Además, vim.async aporta primitivas habituales en runtimes modernos:
vim.async.semaphore()controla el número máximo de tareas concurrentes,vim.async.timeout()impone límites de tiempo con cancelación automática,vim.async.iter()permite consumir resultados en orden de finalización, yvim.async.pawait()actúa como unpcallasíncrono, devolviendo un estado y un valor o error.
Antes, los plugins dependían de vim.uv (antes vim.loop) o de librerías externas como plenary.nvim y async.nvim, lo que generaba código fragmentado y callbacks anidados. La integración directa en el core elimina esa fragmentación y reduce colisiones entre dependencias de terceros.
La comunidad ha recibido la incorporación con entusiasmo. En Reddit, el hilo vim.async has been merged muestra elogios por la claridad que aporta la abstracción y debates técnicos sobre la interacción entre vim.async.await() y los callbacks de estilo libuv. Los usuarios destacan que la nueva API simplifica la gestión de errores y la cancelación de tareas, dos puntos críticos que antes provocaban fallos silenciosos.
Para los desarrolladores que necesiten sincronizar código síncrono con tareas asíncronas, están disponibles Task:wait() y Task:pwait(), que hacen bombear el bucle de eventos hasta que la tarea concluye. La documentación completa, con ejemplos y referencia de la API, está disponible en el sitio oficial de Neovim.
Esta evolución permite a los mantenedores de plugins escribir código más robusto y predecible, lo que a largo plazo reducirá bugs relacionados con la concurrencia y mejorará la experiencia del usuario al evitar bloqueos del editor.


