Lua Academy · leksjon

Neovim Lua-API-et

Slik kobler programtillegg seg til.

Leksjon 1 av 413 trinn

Neovim Lua-API-et er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hvorfor Lua i Neovim

Neovim har en innebygd LuaJIT-kjøretid, noe som gjør Lua til det innebygde skriptspråket ved siden av Vimscript. Utviklere av programtillegg foretrekker Lua på grunn av hastigheten, ordentlige datastrukturer og et ryddig modulsystem.

Den globale vim-tabellen er inngangsporten til alt: redigeringstilstand, API-et, alternativer og hjelpefunksjoner i standardbiblioteket. Å beherske den er grunnlaget for moderne utvikling av programtillegg.

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

vim.api-laget

vim.api eksponerer det lavnivåbaserte fjern-API-et: alle funksjoner som har prefikset nvim_. Dette er de samme kallene som eksterne klienter bruker over RPC, men når de kjøres i prosessen, utføres de umiddelbart.

Funksjoner som nvim_get_current_buf, nvim_buf_set_lines og nvim_command gir presis kontroll. De er stabile, godt dokumenterte og utgjør ryggraden i seriøse programtillegg.

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

vim.fn — Kalle Vimscript-funksjoner

vim.fn fungerer som en bro til Vimscripts innebygde funksjoner. Alt som kan kalles fra Vimscript, for eksempel expand() eller fnamemodify(), er tilgjengelig som vim.fn.expand(...).

Dette er uvurderlig når det ennå ikke finnes noe innebygd API. Argumenter og returverdier konverteres automatisk mellom Lua- og Vimscript-typer.

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

Alternativer: vim.o, vim.bo, vim.wo

Alternativer angis gjennom metatabeller. vim.o gjelder globale alternativer, vim.bo bufferlokale alternativer og vim.wo vinduslokale alternativer.

Det er like enkelt å tilordne dem som å skrive til et felt. Dette erstatter de omstendelige nvim_set_option-kallene og gir konfigurasjonskode som er naturlig å lese.

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

vim.g og globale variabler

vim.g leser og skriver globale Vim-variabler. Programtillegg eksponerer ofte konfigurasjonsbrytere her, for eksempel vim.g.myplugin_enabled.

Hvis en variabel ikke er satt, returneres nil, så bruk standardverdier som sikkerhetsnett. Det finnes også buffer- og vinduslokale varianter som vim.b og vim.w.

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

Varsler og ekko

Bruk vim.notify for å vise meldinger til brukeren. Den tar imot en meldingsstreng og et valgfritt loggnivå fra vim.log.levels.

Programtilleggsbehandlere som noice eller notify kan fange opp disse for å gi et penere brukergrensesnitt. Foretrekk vim.notify fremfor direkte print for utdata som vises til brukeren.

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

Planlegging med vim.schedule

Enkelte API-kall er forbudt i kontekster for raske hendelser, for eksempel inne i bestemte tilbakekall. vim.schedule utsetter en funksjon til hovedsløyfen, der hele API-et er trygt å bruke.

Dette unngår de fryktede «E5560»-feilene når buffere endres fra asynkrone kontekster eller autokommando-kontekster.

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

Autokommandoer i Lua

nvim_create_autocmd registrerer hendelsesbehandlere. Samle dem i grupper med nvim_create_augroup, og angi clear = true for å unngå duplikater ved omlasting.

Tilbakekallet mottar en hendelsestabell med felter som buf og match, noe som gir presis kontekst for behandleren.

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 og strenghjelpere

Neovim leveres med et omfattende standardbibliotek. vim.tbl_extend, vim.tbl_keys og vim.split dekker vanlig arbeid med tabeller og strenger.

vim.tbl_deep_extend('force', defaults, opts) er den anbefalte måten å slå sammen brukerkonfigurasjon over standardinnstillingene til et programtillegg på.

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 for feilsøking

vim.inspect serialiserer enhver Lua-verdi til en lesbar streng, også nestede tabeller. Det er den raskeste måten å forstå formen på returverdier fra API-et.

Kombiner den med :lua print(vim.inspect(...)) eller :lua= expr i nyere Neovim for rask inspeksjon under utvikling.

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

Avveiinger mellom API-et og Vimscript

Foretrekk vim.api for stabile, strukturerte operasjoner. Bruk vim.fn eller vim.cmd når det ikke finnes noen innebygd funksjon.

vim.cmd kjører ex-kommandoer som strenger og er praktisk for enkeltstående tilfeller som vim.cmd('highlight ...'), men det er vanskeligere å inspisere enn typede API-kall.

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

Hurtigsjekk

Test forståelsen din av Neovims Lua-API.

Oppsummering: Lua-API-et

Du kjenner nå de viktigste grensesnittene: vim.api for det typede, innebygde API-et, vim.fn for Vimscript-funksjoner og vim.cmd for ex-kommandoer.

Alternativer går gjennom vim.o/bo/wo, variabler gjennom vim.g/b/w, og hjelpefunksjoner som vim.tbl_deep_extend, vim.notify og vim.schedule kompletterer verktøykassen til en utvikler av programtillegg.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Neovim Lua-API-et» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Neovim Lua-API-et», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Neovim Lua-API-et»?

Slik kobler programtillegg seg til. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Neovim Lua-API-et»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Neovim Lua-API-et
  2. Kommandoer og tastetilordninger
  3. Buffere og vinduer
  4. Pakk et programtillegg
← Tilbake til Lua Academy