0Pricing
Lua Academy · Lektion

Die Neovim-Lua-API

Wie Plugins sich einbinden.

Die Neovim-Lua-API ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Warum Lua in Neovim

Neovim bindet eine LuaJIT-Laufzeitumgebung ein und macht Lua damit neben Vimscript zur nativen Skriptsprache. Plugin-Autoren bevorzugen Lua wegen seiner Geschwindigkeit, seiner echten Datenstrukturen und seines übersichtlichen Modulsystems.

Die globale Tabelle vim ist das Tor zu allem: zum Editorstatus, zur API, zu Optionen und zu Hilfsfunktionen der Standardbibliothek. Sie zu beherrschen, bildet die Grundlage für die moderne Plugin-Entwicklung.

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

Die Ebene vim.api

vim.api stellt die API auf niedriger Ebene bereit: jede Funktion trägt das Präfix nvim_. Es handelt sich um dieselben Aufrufe, die externe Clients über RPC verwenden, aber innerhalb des Prozesses werden sie sofort ausgeführt.

Funktionen wie nvim_get_current_buf, nvim_buf_set_lines und nvim_command ermöglichen eine präzise Steuerung. Sie sind stabil, gut dokumentiert und bilden das Rückgrat anspruchsvoller Plugins.

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

vim.fn — Vimscript-Funktionen aufrufen

vim.fn stellt eine Verbindung zu den integrierten Funktionen von Vimscript her. Alles, was in Vimscript aufgerufen werden kann, etwa expand() oder fnamemodify(), ist als vim.fn.expand(...) erreichbar.

Das ist besonders wertvoll, wenn noch keine native API existiert. Argumente und Rückgabewerte werden automatisch zwischen Lua- und Vimscript-Typen konvertiert.

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

Optionen: vim.o, vim.bo, vim.wo

Optionen werden über Metatabellen gesetzt. vim.o bezieht sich auf globale Optionen, vim.bo auf bufferlokale und vim.wo auf fensterlokale Optionen.

Eine Zuweisung ist so einfach wie das Schreiben in ein Feld. Damit werden die ausführlichen Aufrufe von nvim_set_option ersetzt, und Konfigurationscode wird besser lesbar.

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

vim.g und globale Variablen

Mit vim.g lesen und schreiben Sie globale Vim-Variablen. Plugins stellen hier häufig Konfigurationsschalter bereit, etwa vim.g.myplugin_enabled.

Beim Lesen einer nicht gesetzten Variable wird nil zurückgegeben, daher sollten Sie Standardwerte verwenden. Varianten für den Buffer- und Fensterbereich sind als vim.b und vim.w verfügbar.

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

Benachrichtigungen und Echo-Ausgaben

Verwenden Sie vim.notify, um dem Benutzer Nachrichten anzuzeigen. Die Funktion akzeptiert eine Nachrichtenzeichenkette und optional eine Protokollebene aus vim.log.levels.

Plugin-Manager wie noice oder notify können diese Aufrufe abfangen und eine ansprechendere Benutzeroberfläche bereitstellen. Für Ausgaben an den Benutzer sollten Sie vim.notify gegenüber dem direkten Aufruf von print bevorzugen.

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

Zeitplanung mit vim.schedule

Einige API-Aufrufe sind in schnellen Ereigniskontexten verboten, etwa innerhalb bestimmter Callbacks. vim.schedule verschiebt eine Funktion in die Hauptschleife, in der die vollständige API sicher verwendet werden kann.

So vermeiden Sie die gefürchteten Fehler „E5560“, wenn Sie Buffer aus asynchronen Kontexten oder Autocommand-Kontexten heraus verändern.

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

Autocommands in Lua

nvim_create_autocmd registriert Event-Handler. Gruppieren Sie sie mit nvim_create_augroup und setzen Sie clear = true, um beim Neuladen Duplikate zu vermeiden.

Der Callback erhält eine Event-Tabelle mit Feldern wie buf und match und damit den präzisen Kontext für Ihren Handler.

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- und String-Hilfsfunktionen

Neovim wird mit einer umfangreichen Standardbibliothek ausgeliefert. vim.tbl_extend, vim.tbl_keys und vim.split decken häufige Arbeiten mit Tabellen und Zeichenketten ab.

vim.tbl_deep_extend('force', defaults, opts) ist der übliche Weg, um die Benutzerkonfiguration mit den Plugin-Standardwerten zusammenzuführen.

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 zur Fehlersuche

vim.inspect serialisiert jeden Lua-Wert in eine lesbare Zeichenkette, einschließlich verschachtelter Tabellen. Damit lässt sich am schnellsten nachvollziehen, wie API-Rückgabewerte aufgebaut sind.

Kombinieren Sie es mit :lua print(vim.inspect(...)) oder in aktuellen Neovim-Versionen mit :lua= expr, um während der Entwicklung schnell Werte zu untersuchen.

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

Abwägung zwischen API und Vimscript

Bevorzugen Sie vim.api für stabile, strukturierte Operationen. Verwenden Sie vim.fn oder vim.cmd als Ausweichmöglichkeit, wenn keine native Funktion existiert.

vim.cmd führt Ex-Befehle als Zeichenketten aus und eignet sich für einmalige Aufrufe wie vim.cmd('highlight ...'). Die Aufrufe lassen sich jedoch schlechter untersuchen als typisierte API-Aufrufe.

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

Kurzer Test

Testen Sie Ihr Verständnis der Lua-API von Neovim.

Zusammenfassung: Die Lua-API

Sie kennen nun die wichtigsten Schnittstellen: vim.api für die typisierte native API, vim.fn für Vimscript-Funktionen und vim.cmd für Ex-Befehle.

Optionen werden über vim.o/bo/wo verwaltet, Variablen über vim.g/b/w, und Hilfsfunktionen wie vim.tbl_deep_extend, vim.notify und vim.schedule vervollständigen das Werkzeugset eines Plugin-Autors.

Häufig gestellte Fragen

Ist die Lektion „Die Neovim-Lua-API“ kostenlos?

Ja — der vollständige Text von „Die Neovim-Lua-API“ 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 „Die Neovim-Lua-API“?

Wie Plugins sich einbinden. 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 1 von 4.

Wie lange dauert die Lektion „Die Neovim-Lua-API“?

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