0Pricing
Lua Academy · Lección

Comandos y mapas de teclas

Añada acciones visibles para el usuario

Comandos y mapas de teclas es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 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.

Descripción general de los comandos de usuario

Los comandos de usuario son comandos con dos puntos que expone su plugin, como :Format o :Telescope. Deben comenzar por una letra mayúscula.

nvim_create_user_command los define en Lua y recibe un nombre, una devolución de llamada o una cadena, y una tabla de opciones. Esto sustituye a :command de Vimscript.

vim.api.nvim_create_user_command('Hello', function()
  print('Hello from my plugin')
end, {})

Argumentos de los comandos

Establezca nargs para aceptar argumentos: '0', '1', '*', '?' o '+'. La devolución de llamada recibe una tabla opts con args, fargs y bang.

fargs es la lista de argumentos ya separada por espacios en blanco, que normalmente es lo que necesita.

vim.api.nvim_create_user_command('Greet', function(opts)
  print('Hi ' .. opts.args)
end, { nargs = 1 })

Comandos con rango y bang

Pase range = true para aceptar rangos de líneas; la devolución de llamada leerá entonces opts.line1 y opts.line2. Añada bang = true para permitir :Cmd!, que se detecta mediante opts.bang.

Estas opciones permiten que un mismo comando se comporte de forma diferente para selecciones visuales o variantes forzadas.

vim.api.nvim_create_user_command('Sum', function(o)
  print(o.line1 .. ' to ' .. o.line2)
end, { range = true })

Autocompletado de comandos

Ofrezca autocompletado mediante la opción complete. Use opciones integradas como 'file' o 'buffer', o una función personalizada de Lua.

Una función de autocompletado personalizada recibe el argumento parcial y la línea de comandos, y devuelve una lista de cadenas candidatas.

vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
  nargs = 1,
  complete = function() return { 'red', 'green', 'blue' } end,
})

Comandos locales al búfer

Para limitar un comando a un solo búfer, use nvim_buf_create_user_command con el identificador del búfer. Esto es habitual en los plugins de tipo de archivo.

Por ejemplo, un plugin de Markdown podría definir :Preview únicamente dentro de los búferes de Markdown, manteniendo limpio el espacio de nombres global.

vim.api.nvim_buf_create_user_command(0, 'Preview', function()
  print('previewing this buffer')
end, {})

Introducción a vim.keymap.set

vim.keymap.set es la API moderna de mapeos. Recibe un modo, las teclas del lado izquierdo, una cadena o función de Lua para el lado derecho y una tabla de opciones.

A diferencia del antiguo nvim_set_keymap, acepta directamente una devolución de llamada de Lua como lado derecho; no hace falta envolverla en <cmd>lua.

vim.keymap.set('n', '<leader>w', function()
  vim.cmd('write')
end, { desc = 'Save file' })

Modos y varios mapeos

El argumento de modo puede ser una sola cadena, como 'n', o una tabla, como { 'n', 'v' }, para asignar varios modos a la vez.

Modos comunes: n normal, i inserción, v visual, x solo visual y t terminal. Una cadena vacía '' significa normal, visual y espera de operador.

vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })

Opciones de los mapeos

La tabla opts controla el comportamiento. silent = true suprime el eco del comando, noremap es true de forma predeterminada por seguridad, y buffer = 0 limita el mapeo al búfer actual.

Añada siempre un desc para que which-key y la salida de :map sigan siendo legibles.

vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
  buffer = 0, silent = true, desc = 'Go to definition',
})

Mapeos de expresión

Con expr = true, la función del lado derecho devuelve las teclas que se introducirán. Esto permite crear mapeos inteligentes, como hacer que <Tab> se comporte de forma diferente cuando hay un menú de autocompletado visible.

Devuelva una cadena vacía para no hacer nada o las teclas literales que se deben insertar.

vim.keymap.set('i', '<Tab>', function()
  return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })

Eliminación de mapeos

Elimine un mapeo con vim.keymap.del, pasando el mismo modo y las mismas teclas, además de un campo buffer si era local al búfer.

Esto resulta útil en rutinas de limpieza o cuando un plugin desactiva una función y debe restaurar las asignaciones originales del usuario.

vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })

Comandos y mapeos de teclas juntos

Una práctica clara consiste en definir la lógica una sola vez, exponerla como un comando de usuario y vincular una tecla que invoque ese comando. Así se mantiene una única fuente de verdad.

Asignar <cmd>Hello<cr> evita salir del modo visual y resulta más predecible que :Hello<cr>.

vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })

Comprobación rápida

Compruebe cuánto domina los comandos y los mapeos de teclas.

Resumen: comandos y mapeos de teclas

Ahora puede crear comandos con nvim_create_user_command, controlarlos mediante nargs, range, bang y complete, y limitar su ámbito a cada búfer.

Para los mapeos, vim.keymap.set acepta devoluciones de llamada de Lua, varios modos y opciones como desc, silent, buffer y expr, mientras que vim.keymap.del permite limpiarlos.

Preguntas frecuentes

¿La lección «Comandos y mapas de teclas» es gratis?

Sí — el texto completo de «Comandos y mapas de teclas» 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 «Comandos y mapas de teclas»?

Añada acciones visibles para el usuario 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 2 de 4.

¿Cuánto tiempo toma la lección «Comandos y mapas de teclas»?

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