0Pricing
Lua Academy · Lektion

Ein Plugin paketieren

Strukturieren und teilen Sie es.

Ein Plugin paketieren ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Verzeichnisstruktur eines Plugins

Ein Neovim-Plugin ist einfach ein Verzeichnis im runtimepath. Die übliche Struktur enthält Verzeichnisse auf oberster Ebene, die Neovim speziell behandelt.

Wichtige Verzeichnisse sind: lua/ für Module, plugin/ für automatisch geladene Einrichtung, ftplugin/ für Dateityp-Skripte, doc/ für die Hilfe und after/ für nachträgliche Überschreibungen.

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

Das Verzeichnis lua/

Auf Dateien unter lua/ können Sie mit require zugreifen. Ein Modul unter lua/myplugin/init.lua wird als require('myplugin') geladen.

Verschachtelungen werden auf Pfade mit Punkten abgebildet: Aus lua/myplugin/config.lua wird require('myplugin.config'). So stellen Plugins einen übersichtlichen öffentlichen Namespace bereit.

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

Eine Modultabelle zurückgeben

Das idiomatische Modulpattern deklariert eine lokale Tabelle M, fügt ihr Funktionen hinzu und gibt sie zurück. Aufrufer greifen dann mit require('myplugin').hello() darauf zu.

Halten Sie interne Hilfsfunktionen als einfache lokale Funktionen, damit nur die gewünschte Schnittstelle öffentlich ist. Das entspricht der Modulenkapselung in anderen Ökosystemen.

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

Die setup()-Konvention

Die meisten Plugins stellen eine Funktion setup(opts) bereit. Sie führt die Benutzeroptionen mit den Standardwerten zusammen und übernimmt die Initialisierung, etwa das Erstellen von Befehlen und Autocommands.

Verwenden Sie vim.tbl_deep_extend('force', defaults, opts or {}), damit eine unvollständige Benutzerkonfiguration weiterhin alle Standardwerte erhält.

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

Das Verzeichnis plugin/

Skripte in plugin/ werden beim Start von Neovim automatisch ausgeführt, nachdem der runtimepath aufgebaut wurde. Halten Sie sie möglichst klein.

Eine häufige Aufgabe ist das Registrieren von Befehlen oder einer Schutzprüfung, damit umfangreiche Module verzögert geladen werden. Vermeiden Sie hier aufwendige Vorgänge und verschieben Sie sie auf setup oder Autocommands, damit der Start schnell bleibt.

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

Ladeschutz

Ein Ladeschutz verhindert eine doppelte Initialisierung, falls die Datei zweimal eingebunden wird. Setzen Sie ein vim.g.loaded_*-Flag und beenden Sie die Ausführung bei einem erneuten Aufruf sofort.

Das ist unverzichtbar, weil Plugin-Manager und :runtime Dateien erneut einbinden können. Doppelte Befehle oder Autocommands führen zu schwer erkennbaren Fehlern.

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

Verzögertes Laden

Ein schneller Start bedeutet, dass Code erst geladen wird, wenn er benötigt wird. Registrieren Sie in plugin/ einen schlanken Befehl, der das umfangreiche Modul bei der ersten Verwendung mit require lädt.

Plugin-Manager wie lazy.nvim setzen dies mit den Auslösern cmd, ft und keys systematisch um. Ihr Modul wird dadurch erst geladen, wenn es aufgerufen wird.

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

runtimepath und packpath

Neovim findet Plugins, indem es den runtimepath durchsucht. Das native Paketsystem lädt Verzeichnisse unter pack/*/start/ automatisch und Verzeichnisse unter pack/*/opt/ bei Bedarf über :packadd.

Die meisten Benutzer verlassen sich auf einen Manager. Wenn Sie den runtimepath verstehen, wird jedoch klar, wie Ihre Verzeichnisse gefunden werden.

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

Gesundheitsprüfungen

Stellen Sie eine Datei lua/myplugin/health.lua mit einer Funktion check bereit, damit Benutzer :checkhealth myplugin ausführen können. Melden Sie den Status über die vim.health-API.

Verwenden Sie vim.health.start, vim.health.ok, vim.health.warn und vim.health.error, um fehlende Abhängigkeiten klar anzuzeigen.

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

Dokumentation und Tags

Liefern Sie eine Hilfedatei doc/myplugin.txt mit. Führen Sie :helptags doc/ aus (oder überlassen Sie dies dem Manager), um den Tag-Index zu erzeugen, damit :help myplugin funktioniert.

Eine gute Dokumentation listet Befehle, die setup-Optionen und die Standard-Tastenzuordnungen auf. So können Sie Ihr Plugin direkt in Neovim leichter entdecken.

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

Versionierung und Veröffentlichung

Hosten Sie das Plugin in einem Git-Repository. Benutzer installieren es über den Pfad owner/repo. Versehen Sie Veröffentlichungen mit semantischen Versions-Tags, damit Manager Versionen festlegen können.

Fügen Sie eine README mit Installationsbeispielen für beliebte Manager, eine Lizenz und ein minimales Konfigurationsbeispiel hinzu, um die Einstiegshürde zu senken.

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

Schnelltest

Überprüfen Sie, ob Sie die Paketierung von Plugins verstanden haben.

Zusammenfassung: Ein Plugin paketieren

Ein Plugin ist ein Verzeichnis im runtimepath mit lua/-Modulen, einem automatisch ausgeführten plugin/-Skript sowie optionalen Dateien in doc/ und ftplugin/ und für Gesundheitsprüfungen.

Geben Sie Modultabellen zurück, stellen Sie ein setup bereit, das Standardwerte zusammenführt, verhindern Sie doppeltes Laden, laden Sie umfangreichen Code verzögert, dokumentieren Sie ihn mit Helptags und veröffentlichen Sie ihn über Git mit semantischen Versions-Tags.

Häufig gestellte Fragen

Ist die Lektion „Ein Plugin paketieren“ kostenlos?

Ja — der vollständige Text von „Ein Plugin paketieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ein Plugin paketieren“?

Strukturieren und teilen Sie es. Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Ein Plugin paketieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Die Neovim-Lua-API
  2. Befehle und Keymaps
  3. Buffer und Fenster
  4. Ein Plugin paketieren
← Zurück zu Lua Academy