0Pricing
Lua Academy · Lektion

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)
end

Extmarks 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
end

Schnelltest

Ü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

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