Lua Academy · Lektion

Pak et plugin

Strukturér og del det.

Lektion 4 af 413 trin

Pak et plugin er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Mappestruktur for plugins

Et Neovim-plugin er blot en mappe på runtimepath. Den konventionelle struktur har mapper på øverste niveau, som Neovim behandler på en særlig måde.

Vigtige mapper: lua/ til moduler, plugin/ til automatisk indlæst opsætning, ftplugin/ til scripts for filtyper, doc/ til hjælp og after/ til sene tilsidesættelser.

-- myplugin/
--   lua/myplugin/init.lua
--   plugin/myplugin.lua
--   doc/myplugin.txt

Mappen lua/

Filer under lua/ kan tilgås med require. Et modul på lua/myplugin/init.lua indlæses som require('myplugin').

Indlejring svarer til punktseparerede stier: lua/myplugin/config.lua bliver til require('myplugin.config'). Sådan eksponerer plugins et rent offentligt navnerum.

-- in lua/myplugin/init.lua
local M = {}
function M.hello() print('hi') end
return M

Returnering af en modultabel

Det gængse modulmønster erklærer en lokal tabel M, føjer funktioner til den og returnerer den. Kaldere tilgår derefter require('myplugin').hello().

Behold interne hjælpefunktioner som almindelige lokale værdier, så kun den tilsigtede grænseflade er offentlig. Det svarer til modulindkapsling i andre økosystemer.

local M = {}
local function private() end
function M.run() private() end
return M

Konventionen med setup()

De fleste plugins eksponerer en funktion ved navn setup(opts). Den sammenfletter brugerindstillinger med standardindstillinger og udfører initialisering, f.eks. oprettelse af kommandoer og autokommandoer.

Brug vim.tbl_deep_extend('force', defaults, opts or {}), så en delvis brugerindstilling stadig får alle standardindstillinger.

local M = {}
local defaults = { width = 40 }
function M.setup(opts)
  M.config = vim.tbl_deep_extend('force', defaults, opts or {})
end
return M

Mappen plugin/

Scripts i plugin/ køres automatisk, når Neovim starter, efter at runtimepath er opbygget. Hold dem meget korte.

En almindelig opgave er at registrere kommandoer eller et værn, så tunge moduler indlæses efter behov. Undgå ressourcekrævende arbejde her; udsæt det til setup eller autokommandoer for at holde opstarten hurtig.

-- in plugin/myplugin.lua
if vim.g.loaded_myplugin then return end
vim.g.loaded_myplugin = true

Indlæsningsværn

Et indlæsningsværn forhindrer dobbelt initialisering, hvis filen indlæses to gange. Sæt et vim.g.loaded_*-flag, og afslut tidligt ved genindtræden.

Det er vigtigt, fordi pluginhåndteringer og :runtime kan indlæse filer igen, og duplikerede kommandoer eller autokommandoer kan give svære fejl.

if vim.g.loaded_myplugin == 1 then return end
vim.g.loaded_myplugin = 1

Indlæsning efter behov

Hurtig opstart kræver, at kode kun indlæses efter behov. Registrér en letvægtskommando i plugin/, som kræver det tunge modul første gang, den bruges.

Pluginhåndteringer som lazy.nvim formaliserer dette med udløserne cmd, ft og keys, så dit modul ikke berøres, før det kaldes.

vim.api.nvim_create_user_command('MyStart', function()
  require('myplugin').run()
end, {})

runtimepath og packpath

Neovim finder plugins ved at gennemgå runtimepath. Det indbyggede pakkesystem indlæser automatisk mapper under pack/*/start/ og indlæser mapper under pack/*/opt/ efter behov via :packadd.

De fleste brugere benytter en pakkehåndtering, men en forståelse af runtimepath forklarer, hvordan dine mapper bliver fundet.

print(vim.o.runtimepath:sub(1, 60))
-- :packadd loads an opt plugin manually

Sundhedstjek

Opret en lua/myplugin/health.lua med en check-funktion, så brugere kan køre :checkhealth myplugin. Rapportér status med vim.health-API'et.

Brug vim.health.start, vim.health.ok, vim.health.warn og vim.health.error til tydeligt at vise manglende afhængigheder.

local M = {}
function M.check()
  vim.health.start('myplugin')
  vim.health.ok('all good')
end
return M

Dokumentation og tags

Medtag en hjælpefil på doc/myplugin.txt. Kør :helptags doc/ (eller lad pakkehåndteringen gøre det) for at generere tagindekset, så :help myplugin virker.

God dokumentation oplister kommandoer, indstillingerne til setup og standardtastebindinger, så dit plugin kan findes fra Neovim.

-- generate tags from the doc directory
vim.cmd('helptags ' .. vim.fn.expand('%:p:h'))

Versionsstyring og publicering

Placér pluginet i et git-repository; brugere installerer det via stien owner/repo. Mærk udgivelser efter semantisk versionering, så pakkehåndteringer kan fastlåse versioner.

Medtag en README med installationsudsnit til populære pakkehåndteringer, en licens og et minimalt konfigurationseksempel for at gøre det nemmere at tage pluginet i brug.

-- lazy.nvim spec
-- { 'owner/myplugin', config = function()
--     require('myplugin').setup({})
--   end }

Hurtigt tjek

Bekræft, at du forstår, hvordan plugins pakkes.

Opsummering: Pakning af et plugin

Et plugin er en mappe på runtimepath med moduler i lua/, et automatisk kørt script i plugin/ og valgfri dokumentation i doc/, scripts i ftplugin/ og filer til sundhedstjek.

Returnér modultabeller, eksponér en setup, der sammenfletter standardindstillinger, beskyt mod dobbelt indlæsning, indlæs tung kode efter behov, dokumentér med helptags, og publicér via git med semantiske versionstags.

Gratis at komme i gang

Lær Lua med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Pak et plugin” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Pak et plugin”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Pak et plugin”?

Strukturér og del det. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lua Academy?

Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Pak et plugin”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lua Academy-lektion?

Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Neovims Lua-API
  2. Kommandoer og keymaps
  3. Buffere og vinduer
  4. Pak et plugin
← Tilbage til Lua Academy