0Pricing
Lua Academy · Lección

Buffers y ventanas

Manipule el editor

Buffers y ventanas es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 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.

Búferes, ventanas y pestañas

Neovim separa el contenido de la visualización. Un búfer contiene texto en memoria; una ventana es una vista de un búfer; una página de pestañas es una disposición de ventanas.

Un mismo búfer puede aparecer en varias ventanas. Los plugins manipulan estos identificadores, que son números enteros, mediante las familias de API nvim_buf_* y nvim_win_*.

local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)

Lectura de líneas del búfer

nvim_buf_get_lines(buf, start, end_, strict) devuelve las líneas como una lista. Los índices empiezan en cero y el final no se incluye; pase -1 como final para llegar a la última línea.

Establecer strict_indexing en false permite índices fuera de rango en lugar de producir un error.

local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)

Escritura de líneas del búfer

nvim_buf_set_lines sustituye un rango por texto nuevo. Para añadir texto al final, establezca el inicio y el final en -1. Para sobrescribirlo todo, use 0, -1.

La sustitución es una lista Lua de cadenas, una por línea, sin caracteres de salto de línea finales.

vim.api.nvim_buf_set_lines(0, -1, -1, false, {
  '-- appended line',
})

Búferes temporales

Cree un búfer no listado y desechable con nvim_create_buf(listed, scratch). Pasar false, true crea un búfer temporal ideal para la interfaz del plugin.

Establezca bufhidden = 'wipe' para que desaparezca al cerrar su ventana y evitar que queden búferes residuales.

local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { 'Panel' })

Opciones locales del búfer

Use vim.bo[buf] como índice para establecer opciones locales del búfer en un identificador específico. Entre las configuraciones habituales de los plugins se encuentran modifiable = false y buftype = 'nofile'.

Hacer que un búfer de visualización no sea modificable evita que los usuarios editen accidentalmente el contenido generado.

vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'

Apertura de ventanas flotantes

nvim_open_win(buf, enter, config) coloca un búfer en una ventana flotante. La configuración establece relative, row, col, width, height y border.

Las ventanas flotantes son la base de interfaces modernas como la documentación contextual, los selectores y las notificaciones.

local win = vim.api.nvim_open_win(buf, true, {
  relative = 'editor', row = 5, col = 10,
  width = 40, height = 10, border = 'rounded',
})

Configuración de ventanas

Ajuste una ventana flotante abierta con nvim_win_set_config, lo que resulta útil para cambiar su tamaño en VimResized. Lea la disposición actual con nvim_win_get_config.

Establezca las opciones locales de la ventana mediante vim.wo[win], por ejemplo para ocultar la línea del cursor o desactivar las columnas de números en los paneles de la interfaz.

vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })

Cursor y posición

Mueva el cursor con nvim_win_set_cursor(win, {row, col}). Tenga en cuenta que la fila empieza en uno, pero la columna empieza en cero, una fuente frecuente de errores de desplazamiento por uno.

Vuelva a leer la posición con nvim_win_get_cursor para recordar y restaurar la posición del usuario antes y después de una operación.

local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })

Validez y limpieza

Los identificadores pueden quedar obsoletos. Compruebe su validez con nvim_buf_is_valid y nvim_win_is_valid antes de actuar sobre identificadores almacenados.

Cierre las ventanas con nvim_win_close(win, force) y elimine los búferes mediante nvim_buf_delete(buf, { force = true }). Valide siempre primero para evitar errores.

if vim.api.nvim_win_is_valid(win) then
  vim.api.nvim_win_close(win, true)
end

Extmarks y namespaces

Los extmarks anclan metadatos al texto y se desplazan conforme se realizan cambios. Cree un namespace con nvim_create_namespace y, después, adjunte texto virtual o resaltados.

nvim_buf_set_extmark admite virt_text, columnas de signos y resaltados en línea; es el motor de los avisos insertados y de los plugins de git blame.

local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
  virt_text = { { ' hint', 'Comment' } },
})

Listado e iteración

nvim_list_bufs y nvim_list_wins devuelven todos los manejadores actuales. Filtre estos manejadores con nvim_buf_is_loaded o comprobando las opciones.

La iteración permite que un plugin actúe en toda la sesión, por ejemplo, cerrando cada ventana flotante o actualizando cada buffer de un tipo de archivo determinado.

for _, b in ipairs(vim.api.nvim_list_bufs()) do
  if vim.api.nvim_buf_is_loaded(b) then print(b) end
end

Comprobación rápida

Verifique lo que ha aprendido sobre buffers y ventanas.

Repaso: buffers y ventanas

Los buffers contienen texto, las ventanas lo muestran y los manejadores son enteros que debe validar antes de usarlos. Puede leer y escribir líneas, crear buffers temporales y establecer opciones locales al buffer.

Las ventanas flotantes mediante nvim_open_win, el control del cursor, los extmarks y las API de listado le proporcionan todo lo necesario para crear interfaces de usuario de plugins completas y con estado.

Preguntas frecuentes

¿La lección «Buffers y ventanas» es gratis?

Sí — el texto completo de «Buffers y ventanas» 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 «Buffers y ventanas»?

Manipule el editor 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 3 de 4.

¿Cuánto tiempo toma la lección «Buffers y ventanas»?

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

  1. La API de Lua de Neovim
  2. Comandos y mapas de teclas
  3. Buffers y ventanas
  4. Empaquetar un plugin
← Volver a Lua Academy