Comandi e keymap
Aggiunga azioni visibili all'utente.
Comandi e keymap è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Panoramica dei comandi utente
I comandi utente sono comandi preceduti da due punti che il plugin mette a disposizione, come :Format o :Telescope. Devono iniziare con una lettera maiuscola.
nvim_create_user_command li definisce in Lua, specificando un nome, un callback o una stringa e una tabella di opzioni. Questo sostituisce :command di Vimscript.
vim.api.nvim_create_user_command('Hello', function()
print('Hello from my plugin')
end, {})Argomenti dei comandi
Imposti nargs per accettare gli argomenti: '0', '1', '*', '?' oppure '+'. Il callback riceve una tabella opts con args, fargs e bang.
fargs è l'elenco degli argomenti già suddiviso in base agli spazi bianchi, che nella maggior parte dei casi è proprio ciò che serve.
vim.api.nvim_create_user_command('Greet', function(opts)
print('Hi ' .. opts.args)
end, { nargs = 1 })Comandi con intervallo e bang
Passi range = true per accettare gli intervalli di righe; il callback leggerà quindi opts.line1 e opts.line2. Aggiunga bang = true per consentire :Cmd!, rilevato tramite opts.bang.
Questi flag permettono allo stesso comando di comportarsi in modo diverso per le selezioni visuali o per le varianti forzate.
vim.api.nvim_create_user_command('Sum', function(o)
print(o.line1 .. ' to ' .. o.line2)
end, { range = true })Completamento dei comandi
Fornisca il completamento con il tasto Tab tramite l'opzione complete. Utilizzi valori integrati come 'file' o 'buffer', oppure una funzione Lua personalizzata.
Un completatore personalizzato riceve l'argomento parziale e la riga di comando, quindi restituisce un elenco di stringhe candidate.
vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
nargs = 1,
complete = function() return { 'red', 'green', 'blue' } end,
})Comandi locali al buffer
Per limitare un comando a un solo buffer, utilizzi nvim_buf_create_user_command con l'handle del buffer. È una pratica comune nei plugin specifici per il tipo di file.
Ad esempio, un plugin Markdown potrebbe definire :Preview solo all'interno dei buffer Markdown, mantenendo pulito lo spazio dei nomi globale.
vim.api.nvim_buf_create_user_command(0, 'Preview', function()
print('previewing this buffer')
end, {})Introduzione a vim.keymap.set
vim.keymap.set è l'API moderna per le mappature. Accetta una modalità, i tasti a sinistra, una stringa o una funzione Lua a destra e una tabella di opzioni.
A differenza del vecchio nvim_set_keymap, accetta direttamente un callback Lua come parte destra, senza bisogno di racchiuderlo in <cmd>lua.
vim.keymap.set('n', '<leader>w', function()
vim.cmd('write')
end, { desc = 'Save file' })Modalità e mappature multiple
L'argomento della modalità può essere una singola stringa come 'n' oppure una tabella come { 'n', 'v' } per eseguire la mappatura in più modalità contemporaneamente.
Modalità comuni: n normale, i inserimento, v visuale, x solo visuale, t terminale. Una stringa vuota '' indica le modalità normale, visuale e di attesa dell'operatore.
vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })Opzioni delle mappature
La tabella opts controlla il comportamento. silent = true nasconde l'eco del comando, noremap è true per impostazione predefinita, per maggiore sicurezza, e buffer = 0 limita la mappatura al buffer corrente.
Aggiunga sempre un desc, così l'output di which-key e di :map rimane leggibile.
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
buffer = 0, silent = true, desc = 'Go to definition',
})Mappature basate su espressioni
Con expr = true, la funzione della parte destra restituisce i tasti da utilizzare. Questo consente di creare mappature intelligenti, ad esempio facendo comportare <Tab> in modo diverso quando è visibile un menu di completamento.
Restituisca una stringa vuota per non eseguire alcuna azione oppure i tasti letterali da inserire.
vim.keymap.set('i', '<Tab>', function()
return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })Eliminare le mappature
Rimuova una mappatura con vim.keymap.del, passando la stessa modalità e gli stessi tasti, oltre a un campo buffer se la mappatura era locale al buffer.
È utile nelle routine di pulizia o quando un plugin disattiva una funzionalità e deve ripristinare le associazioni originali dell'utente.
vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })Comandi e mappature insieme
Un modello pulito consiste nel definire la logica una sola volta, esporla come comando utente e associare a quel comando un tasto. In questo modo si mantiene un'unica fonte di verità.
Associare il tasto a <cmd>Hello<cr> evita di uscire dalla modalità visuale ed è più prevedibile di :Hello<cr>.
vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })Verifica rapida
Verifichi la sua comprensione dei comandi e delle mappature dei tasti.
Riepilogo: comandi e mappature
Ora sa creare comandi con nvim_create_user_command, controllarli tramite nargs, range, bang e complete e limitarli a uno specifico buffer.
Per le mappature, vim.keymap.set accetta callback Lua, più modalità e opzioni come desc, silent, buffer ed expr, mentre vim.keymap.del consente di rimuoverle.
Domande Frequenti
La lezione «Comandi e keymap» è gratuita?
Sì — il testo completo di «Comandi e keymap» è 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 «Comandi e keymap»?
Aggiunga azioni visibili all'utente. 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 2 di 4.
Quanto tempo richiede la lezione «Comandi e keymap»?
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