Buffer und Fenster
Bearbeiten Sie den Editor.
Buffer und Fenster ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Buffer, Fenster, Tabs
Neovim trennt Inhalt und Darstellung. Ein Buffer enthält Text im Speicher, ein Fenster ist ein Ansichtsbereich auf einen Buffer, und eine Tabpage ist eine Anordnung von Fenstern.
Ein Buffer kann in mehreren Fenstern erscheinen. Plugins bearbeiten diese Handles, bei denen es sich um Ganzzahlen handelt, über die API-Funktionsfamilien nvim_buf_* und nvim_win_*.
local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)Bufferzeilen lesen
nvim_buf_get_lines(buf, start, end_, strict) gibt Zeilen als Liste zurück. Die Indizes beginnen bei null, und das Ende ist exklusiv. Übergeben Sie -1 als Ende, um bis zur letzten Zeile zu lesen.
Wenn Sie strict_indexing auf false setzen, werden Indizes außerhalb des gültigen Bereichs toleriert, statt einen Fehler auszulösen.
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)Bufferzeilen schreiben
nvim_buf_set_lines ersetzt einen Bereich durch neuen Text. Um am Ende anzuhängen, setzen Sie Anfang und Ende auf -1. Um alles zu überschreiben, verwenden Sie 0, -1.
Der Ersatz ist eine Lua-Liste aus Zeichenketten, eine pro Zeile, ohne abschließende Zeilenumbruchzeichen.
vim.api.nvim_buf_set_lines(0, -1, -1, false, {
'-- appended line',
})Scratch-Buffer
Erstellen Sie mit nvim_create_buf(listed, scratch) einen nicht gelisteten, vorübergehenden Buffer. Mit false, true wird er zu einem Scratch-Buffer, der sich ideal für die Benutzeroberfläche eines Plugins eignet.
Setzen Sie bufhidden = 'wipe', damit der Buffer beim Schließen seines Fensters verschwindet und keine zurückgebliebenen Buffer entstehen.
local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { 'Panel' })Bufferlokale Optionen
Indizieren Sie vim.bo[buf], um bufferlokale Optionen für ein bestimmtes Handle zu setzen. Zu den häufigen Plugin-Einstellungen gehören modifiable = false und buftype = 'nofile'.
Wenn Sie einen Anzeigebuffer nicht bearbeitbar machen, verhindern Sie, dass Benutzer versehentlich generierte Inhalte ändern.
vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'Schwebende Fenster öffnen
nvim_open_win(buf, enter, config) platziert einen Buffer in einem schwebenden Fenster. Die Konfiguration legt relative, row, col, width, height und border fest.
Schwebende Fenster bilden die Grundlage moderner Benutzeroberflächen wie Hover-Dokumentationen, Auswahlfenster und Benachrichtigungen.
local win = vim.api.nvim_open_win(buf, true, {
relative = 'editor', row = 5, col = 10,
width = 40, height = 10, border = 'rounded',
})Fensterkonfiguration
Passen Sie ein geöffnetes schwebendes Fenster mit nvim_win_set_config an. Das ist nützlich, um es bei VimResized neu zu dimensionieren. Lesen Sie das aktuelle Layout mit nvim_win_get_config aus.
Setzen Sie fensterlokale Optionen über vim.wo[win], etwa um die Cursorzeile auszublenden oder Spalten mit Zeilennummern in UI-Panels zu deaktivieren.
vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })Cursor und Position
Bewegen Sie den Cursor mit nvim_win_set_cursor(win, {row, col}). Beachten Sie, dass die Zeile bei eins beginnt, die Spalte jedoch bei null – eine häufige Ursache für Off-by-one-Fehler.
Lesen Sie die Position mit nvim_win_get_cursor wieder aus, um die Position des Benutzers vor einer Operation zu speichern und anschließend wiederherzustellen.
local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })Gültigkeit und Bereinigung
Handles können ungültig werden. Prüfen Sie mit nvim_buf_is_valid und nvim_win_is_valid, ob gespeicherte Handles noch gültig sind, bevor Sie sie verwenden.
Schließen Sie Fenster mit nvim_win_close(win, force) und löschen Sie Buffer über nvim_buf_delete(buf, { force = true }). Führen Sie immer zuerst eine Gültigkeitsprüfung durch, um Fehler zu vermeiden.
if vim.api.nvim_win_is_valid(win) then
vim.api.nvim_win_close(win, true)
endExtmarks und Namespaces
Extmarks verankern Metadaten an Text, der sich bei Bearbeitungen mitbewegt. Erstellen Sie mit nvim_create_namespace einen Namespace und fügen Sie anschließend virtuellen Text oder Hervorhebungen hinzu.
nvim_buf_set_extmark unterstützt virt_text, Sign-Spalten und Inline-Hervorhebungen. Darauf basieren Inlay-Hints- und Git-Blame-Plugins.
local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
virt_text = { { ' hint', 'Comment' } },
})Auflisten und Iterieren
nvim_list_bufs und nvim_list_wins geben alle aktuellen Handles zurück. Filtern Sie diese mit nvim_buf_is_loaded oder indem Sie Optionen überprüfen.
Durch Iterieren kann ein Plugin in der gesamten Sitzung Aktionen ausführen, etwa jedes schwebende Fenster schließen oder jeden Puffer eines bestimmten Dateityps aktualisieren.
for _, b in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_is_loaded(b) then print(b) end
endSchnelltest
Überprüfen Sie, was Sie über Puffer und Fenster gelernt haben.
Zusammenfassung: Puffer und Fenster
Puffer enthalten Text, Fenster zeigen ihn an, und Handles sind Ganzzahlen, die Sie vor der Verwendung validieren. Sie können Zeilen lesen und schreiben, Scratch-Puffer erstellen und pufferlokale Optionen setzen.
Schwebende Fenster über nvim_open_win, Cursorsteuerung, Extmarks und APIs zum Auflisten bieten alles, was Sie zum Erstellen umfangreicher, zustandsbehafteter Plugin-Oberflächen benötigen.
Häufig gestellte Fragen
Ist die Lektion „Buffer und Fenster“ kostenlos?
Ja — der vollständige Text von „Buffer und Fenster“ 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 „Buffer und Fenster“?
Bearbeiten Sie den Editor. 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 3 von 4.
Wie lange dauert die Lektion „Buffer und Fenster“?
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
- Die Neovim-Lua-API
- Befehle und Keymaps
- Buffer und Fenster
- Ein Plugin paketieren