0Pricing
Lua Academy · Lezione

L'API Lua di Neovim

Scopra come si integrano i plugin.

L'API Lua di Neovim è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Perché usare Lua in Neovim

Neovim integra un runtime LuaJIT, rendendo Lua il linguaggio nativo per gli script insieme a Vimscript. Gli autori dei plugin preferiscono Lua per la sua velocità, per le vere strutture dati e per il suo sistema di moduli pulito.

La tabella globale vim è il punto di accesso a tutto: stato dell'editor, API, opzioni e funzioni di supporto della libreria standard. Padroneggiarla è la base per lo sviluppo moderno dei plugin.

print(vim.inspect(vim.version()))

Il livello vim.api

vim.api espone l'API remota di basso livello: ogni funzione ha il prefisso nvim_. Sono le stesse chiamate utilizzate dai client esterni tramite RPC, ma all'interno del processo vengono eseguite istantaneamente.

Funzioni come nvim_get_current_buf, nvim_buf_set_lines e nvim_command offrono un controllo preciso. Sono stabili, ben documentate e costituiscono la base dei plugin più avanzati.

local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)

vim.fn — Chiamare le funzioni Vimscript

vim.fn fa da ponte verso le funzioni integrate di Vimscript. Qualsiasi funzione chiamabile in Vimscript, come expand() o fnamemodify(), è accessibile come vim.fn.expand(...).

È indispensabile quando non esiste ancora un'API nativa. Gli argomenti e i valori restituiti vengono convertiti automaticamente tra i tipi Lua e Vimscript.

local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)

Opzioni: vim.o, vim.bo, vim.wo

Le opzioni si impostano tramite metatabelle. vim.o riguarda le opzioni globali, vim.bo quelle locali al buffer e vim.wo quelle locali alla finestra.

Assegnare un valore è semplice quanto scrivere in un campo. Questo sostituisce le verbose chiamate a nvim_set_option e rende il codice di configurazione più naturale da leggere.

vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = false

vim.g e le variabili globali

vim.g legge e scrive le variabili Vim globali. I plugin espongono comunemente qui le opzioni di configurazione, ad esempio vim.g.myplugin_enabled.

La lettura di una variabile non impostata restituisce nil, quindi utilizzi dei valori predefiniti come protezione. Esistono anche le varianti con ambito di buffer e finestra, vim.b e vim.w.

vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)

Notifiche ed echo

Utilizzi vim.notify per mostrare messaggi all'utente. Accetta una stringa di messaggio e un livello di log facoltativo proveniente da vim.log.levels.

Plugin manager come noice o notify possono intercettare questi messaggi per offrire un'interfaccia migliore. Per l'output destinato all'utente, preferisca vim.notify a un semplice print.

vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)

Pianificazione con vim.schedule

Alcune chiamate API non sono consentite nei contesti di eventi rapidi, ad esempio all'interno di determinati callback. vim.schedule rimanda l'esecuzione di una funzione al ciclo principale, dove l'intera API può essere utilizzata in sicurezza.

In questo modo si evitano i temuti errori "E5560" quando si modificano i buffer da contesti asincroni o di autocomandi.

vim.schedule(function()
  vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)

Autocomandi in Lua

nvim_create_autocmd registra i gestori degli eventi. Li raggruppi con nvim_create_augroup e imposti clear = true per evitare duplicati durante il ricaricamento.

Il callback riceve una tabella di eventi con campi come buf e match, che forniscono al gestore il contesto preciso.

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 e funzioni di supporto per le stringhe

Neovim include una ricca libreria standard. vim.tbl_extend, vim.tbl_keys e vim.split coprono le operazioni più comuni su tabelle e stringhe.

vim.tbl_deep_extend('force', defaults, opts) è il modo canonico per unire la configurazione dell'utente ai valori predefiniti 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 per il debug

vim.inspect serializza qualsiasi valore Lua in una stringa leggibile, comprese le tabelle annidate. È il modo più rapido per capire la struttura dei valori restituiti dall'API.

Lo abbini a :lua print(vim.inspect(...)) oppure a :lua= expr nelle versioni recenti di Neovim per eseguire ispezioni rapide durante lo sviluppo.

local info = vim.api.nvim_get_mode()
print(vim.inspect(info))

Compromessi tra API e Vimscript

Preferisca vim.api per le operazioni stabili e strutturate. Ricorra a vim.fn o vim.cmd quando non esiste una funzione nativa.

vim.cmd esegue comandi Ex sotto forma di stringhe ed è pratico per operazioni occasionali come vim.cmd('highlight ...'), ma consente meno introspezione rispetto alle chiamate API tipizzate.

vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')

Verifica rapida

Verifichi la sua comprensione delle API Lua di Neovim.

Riepilogo: l'API Lua

Ora conosce le superfici principali: vim.api per l'API nativa tipizzata, vim.fn per le funzioni Vimscript e vim.cmd per i comandi Ex.

Le opzioni passano attraverso vim.o/bo/wo, le variabili attraverso vim.g/b/w e funzioni di supporto come vim.tbl_deep_extend, vim.notify e vim.schedule completano il kit di strumenti dell'autore di plugin.

Domande Frequenti

La lezione «L'API Lua di Neovim» è gratuita?

Sì — il testo completo di «L'API Lua di Neovim» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «L'API Lua di Neovim»?

Scopra come si integrano i plugin. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «L'API Lua di Neovim»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. L'API Lua di Neovim
  2. Comandi e keymap
  3. Buffer e finestre
  4. Distribuire un plugin
← Torna a Lua Academy