Buffer e finestre
Manipoli l'editor.
Buffer e finestre è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 3 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.
Buffer, finestre e tab
Neovim separa il contenuto dalla visualizzazione. Un buffer contiene il testo in memoria; una finestra è una vista su un buffer; una tabpage è una disposizione di finestre.
Lo stesso buffer può essere visualizzato in molte finestre. I plugin manipolano questi handle, che sono numeri interi, tramite le famiglie di API nvim_buf_* e nvim_win_*.
local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)Leggere le righe di un buffer
nvim_buf_get_lines(buf, start, end_, strict) restituisce le righe come elenco. Gli indici partono da zero e l'estremo finale non è incluso; passi -1 come fine per arrivare all'ultima riga.
Impostando strict_indexing su false si accettano gli indici fuori intervallo invece di generare un errore.
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)Scrivere le righe di un buffer
nvim_buf_set_lines sostituisce un intervallo con nuovo testo. Per aggiungere contenuto alla fine, imposti sia l'inizio sia la fine su -1. Per sovrascrivere tutto, utilizzi 0, -1.
La sostituzione è un elenco Lua di stringhe, una per riga, senza caratteri di nuova riga finali.
vim.api.nvim_buf_set_lines(0, -1, -1, false, {
'-- appended line',
})Buffer scratch
Crei un buffer temporaneo non elencato con nvim_create_buf(listed, scratch). Passare false, true crea un buffer scratch ideale per l'interfaccia del plugin.
Imposti bufhidden = 'wipe' in modo che scompaia quando si chiude la finestra, evitando di lasciare buffer inutilizzati.
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' })Opzioni locali al buffer
Utilizzi vim.bo[buf] per impostare le opzioni locali al buffer su un handle specifico. Tra le impostazioni comuni dei plugin ci sono modifiable = false e buftype = 'nofile'.
Rendere non modificabile un buffer di visualizzazione impedisce agli utenti di modificare accidentalmente il contenuto generato.
vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'Aprire finestre fluttuanti
nvim_open_win(buf, enter, config) inserisce un buffer in una finestra fluttuante. La configurazione imposta relative, row, col, width, height e border.
Le finestre fluttuanti sono alla base delle moderne interfacce utente, come la documentazione al passaggio del mouse, i selettori e le notifiche.
local win = vim.api.nvim_open_win(buf, true, {
relative = 'editor', row = 5, col = 10,
width = 40, height = 10, border = 'rounded',
})Configurazione delle finestre
Modifichi una finestra fluttuante aperta con nvim_win_set_config, utile per ridimensionarla durante VimResized. Legga la disposizione corrente con nvim_win_get_config.
Imposti le opzioni locali alla finestra tramite vim.wo[win], ad esempio per nascondere la riga del cursore o disabilitare le colonne dei numeri nei pannelli dell'interfaccia.
vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })Cursore e posizione
Sposti il cursore con nvim_win_set_cursor(win, {row, col}). Tenga presente che la riga parte da uno, mentre la colonna parte da zero: è una frequente fonte di errori di tipo off-by-one.
Legga la posizione con nvim_win_get_cursor per ricordare e ripristinare la posizione dell'utente prima e dopo un'operazione.
local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })Validità e pulizia
Gli handle possono diventare obsoleti. Verifichi la loro validità con nvim_buf_is_valid e nvim_win_is_valid prima di utilizzare gli handle memorizzati.
Chiuda le finestre con nvim_win_close(win, force) ed elimini i buffer tramite nvim_buf_delete(buf, { force = true }). Esegua sempre prima la verifica per evitare errori.
if vim.api.nvim_win_is_valid(win) then
vim.api.nvim_win_close(win, true)
endExtmark e namespace
Gli extmark ancorano i metadati al testo, che si sposta man mano che vengono apportate modifiche. Crei un namespace con nvim_create_namespace, quindi associ testo virtuale o evidenziazioni.
nvim_buf_set_extmark supporta virt_text, colonne dei segni ed evidenziazioni inline: è il motore alla base degli hint inline e dei plugin git blame.
local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
virt_text = { { ' hint', 'Comment' } },
})Elencare e iterare
nvim_list_bufs e nvim_list_wins restituiscono tutti gli handle attualmente disponibili. Li filtri con nvim_buf_is_loaded oppure controllando le opzioni.
L'iterazione permette a un plugin di agire sull'intera sessione, ad esempio chiudendo ogni finestra flottante o aggiornando ciascun buffer di un determinato filetype.
for _, b in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_is_loaded(b) then print(b) end
endVerifica rapida
Verifichi ciò che ha imparato sui buffer e sulle finestre.
Riepilogo: buffer e finestre
I buffer contengono testo, le finestre lo visualizzano e gli handle sono numeri interi che deve convalidare prima dell'uso. Può leggere e scrivere righe, creare buffer scratch e impostare opzioni locali al buffer.
Le finestre flottanti tramite nvim_open_win, il controllo del cursore, gli extmark e le API per gli elenchi Le forniscono tutto ciò che serve per creare interfacce UI di plugin ricche e con stato.
Domande Frequenti
La lezione «Buffer e finestre» è gratuita?
Sì — il testo completo di «Buffer e finestre» è 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 «Buffer e finestre»?
Manipoli l'editor. 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 3 di 4.
Quanto tempo richiede la lezione «Buffer e finestre»?
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
- L'API Lua di Neovim
- Comandi e keymap
- Buffer e finestre
- Distribuire un plugin