La API de Lua de Neovim
Cómo se integran los plugins
La API de Lua de Neovim es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Por qué usar Lua en Neovim
Neovim incorpora un entorno de ejecución LuaJIT, lo que convierte a Lua en el lenguaje de scripting nativo junto con Vimscript. Los autores de plugins prefieren Lua por su velocidad, sus estructuras de datos propiamente dichas y su sistema de módulos claro.
La tabla global vim es la puerta de entrada a todo: el estado del editor, la API, las opciones y las funciones auxiliares de la biblioteca estándar. Dominarla es la base del desarrollo moderno de plugins.
print(vim.inspect(vim.version()))La capa vim.api
vim.api expone la API remota de bajo nivel: todas las funciones cuyo prefijo es nvim_. Son las mismas llamadas que los clientes externos usan a través de RPC, pero dentro del proceso se ejecutan al instante.
Funciones como nvim_get_current_buf, nvim_buf_set_lines y nvim_command ofrecen un control preciso. Son estables, están bien documentadas y constituyen la base de los plugins serios.
local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)vim.fn — Invocación de funciones de Vimscript
vim.fn conecta con las funciones integradas de Vimscript. Cualquier función que se pueda invocar en Vimscript, como expand() o fnamemodify(), está disponible como vim.fn.expand(...).
Esto resulta sumamente útil cuando todavía no existe una API nativa. Los argumentos y valores devueltos se convierten automáticamente entre los tipos de Lua y Vimscript.
local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)Opciones: vim.o, vim.bo, vim.wo
Las opciones se establecen mediante metatablas. vim.o se aplica a las opciones globales, vim.bo a las locales del búfer y vim.wo a las locales de la ventana.
Asignar una opción es tan sencillo como escribir un campo. Esto sustituye a las llamadas más verbosas a nvim_set_option y resulta natural en el código de configuración.
vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = falsevim.g y las variables globales
vim.g lee y escribe variables globales de Vim. Los plugins suelen exponer aquí opciones de configuración, como vim.g.myplugin_enabled.
Leer una variable que no se ha establecido devuelve nil, por lo que debe protegerse con valores predeterminados. También existen variantes con ámbito de búfer y de ventana, vim.b y vim.w.
vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)Notificaciones y mensajes
Use vim.notify para mostrar mensajes al usuario. Acepta una cadena de mensaje y un nivel de registro opcional de vim.log.levels.
Los gestores de plugins, como noice o notify, pueden interceptar estos mensajes para ofrecer una interfaz más agradable. Prefiera vim.notify a print sin formato para la salida destinada al usuario.
vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)Programación con vim.schedule
Algunas llamadas a la API están prohibidas en contextos de eventos rápidos, como dentro de ciertas devoluciones de llamada. vim.schedule aplaza una función al bucle principal, donde toda la API es segura.
Esto evita los temidos errores "E5560" al modificar búferes desde contextos asíncronos o de autocomandos.
vim.schedule(function()
vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)Autocomandos en Lua
nvim_create_autocmd registra controladores de eventos. Agrúpelos con nvim_create_augroup y establezca clear = true para evitar duplicados al recargar.
La devolución de llamada recibe una tabla de evento con campos como buf y match, lo que proporciona un contexto preciso para el controlador.
local grp = vim.api.nvim_create_augroup('MyGrp', { clear = true })
vim.api.nvim_create_autocmd('BufWritePost', {
group = grp,
pattern = '*.lua',
callback = function(ev) print('saved ' .. ev.file) end,
})vim.tbl y funciones auxiliares para cadenas
Neovim incluye una completa biblioteca estándar. vim.tbl_extend, vim.tbl_keys y vim.split cubren las operaciones habituales con tablas y cadenas.
vim.tbl_deep_extend('force', defaults, opts) es la forma canónica de combinar la configuración del usuario con los valores predeterminados del plugin.
local defaults = { width = 40, border = 'single' }
local opts = { width = 60 }
local cfg = vim.tbl_deep_extend('force', defaults, opts)
print(cfg.width, cfg.border)vim.inspect para depuración
vim.inspect serializa cualquier valor de Lua en una cadena legible, incluidas las tablas anidadas. Es la forma más rápida de comprender la estructura de los valores devueltos por la API.
Combínelo con :lua print(vim.inspect(...)) o con :lua= expr en las versiones recientes de Neovim para inspeccionar valores rápidamente durante el desarrollo.
local info = vim.api.nvim_get_mode()
print(vim.inspect(info))Ventajas y desventajas de la API frente a Vimscript
Prefiera vim.api para las operaciones estables y estructuradas. Recurra a vim.fn o vim.cmd cuando no exista una función nativa.
vim.cmd ejecuta comandos ex como cadenas y resulta práctico para casos puntuales, como vim.cmd('highlight ...'), pero permite inspeccionar menos información que las llamadas a la API con tipos.
vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')Comprobación rápida
Compruebe cuánto domina la superficie de la API Lua de Neovim.
Resumen: la API de Lua
Ahora conoce las interfaces principales: vim.api para la API nativa con tipos, vim.fn para las funciones de Vimscript y vim.cmd para los comandos ex.
Las opciones se gestionan mediante vim.o/bo/wo, las variables mediante vim.g/b/w, y funciones auxiliares como vim.tbl_deep_extend, vim.notify y vim.schedule completan el conjunto de herramientas del autor de plugins.
Preguntas frecuentes
¿La lección «La API de Lua de Neovim» es gratis?
Sí — el texto completo de «La API de Lua de Neovim» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «La API de Lua de Neovim»?
Cómo se integran los plugins Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «La API de Lua de Neovim»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La API de Lua de Neovim
- Comandos y mapas de teclas
- Buffers y ventanas
- Empaquetar un plugin