Befehle und Keymaps
Fügen Sie nutzerseitige Aktionen hinzu.
Befehle und Keymaps ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Überblick über Benutzerbefehle
Benutzerbefehle sind Colon-Befehle, die Ihr Plugin bereitstellt, etwa :Format oder :Telescope. Sie müssen mit einem Großbuchstaben beginnen.
nvim_create_user_command definiert sie in Lua und erwartet einen Namen, einen Callback oder eine Zeichenkette sowie eine Optionentabelle. Damit wird Vimscripts :command ersetzt.
vim.api.nvim_create_user_command('Hello', function()
print('Hello from my plugin')
end, {})Befehlsargumente
Setzen Sie nargs, um Argumente zu akzeptieren: '0', '1', '*', '?' oder '+'. Der Callback erhält eine opts-Tabelle mit args, fargs und bang.
fargs ist die bereits an Leerzeichen aufgeteilte Argumentliste und daher normalerweise genau das, was Sie benötigen.
vim.api.nvim_create_user_command('Greet', function(opts)
print('Hi ' .. opts.args)
end, { nargs = 1 })Befehle mit Bereich und Bang
Übergeben Sie range = true, um Zeilenbereiche zu akzeptieren. Der Callback liest dann opts.line1 und opts.line2. Fügen Sie bang = true hinzu, um :Cmd! zu erlauben; erkannt wird dies über opts.bang.
Mit diesen Schaltern kann sich ein Befehl bei visuellen Auswahlen oder erzwungenen Varianten unterschiedlich verhalten.
vim.api.nvim_create_user_command('Sum', function(o)
print(o.line1 .. ' to ' .. o.line2)
end, { range = true })Befehlsvervollständigung
Stellen Sie mit der Option complete eine Vervollständigung per Tab bereit. Verwenden Sie integrierte Varianten wie 'file' oder 'buffer' oder eine eigene Lua-Funktion.
Ein eigener Vervollständiger erhält das teilweise eingegebene Argument und die Befehlszeile und gibt eine Liste möglicher Zeichenketten zurück.
vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
nargs = 1,
complete = function() return { 'red', 'green', 'blue' } end,
})Bufferlokale Befehle
Um einen Befehl auf einen Buffer zu beschränken, verwenden Sie nvim_buf_create_user_command mit dem Buffer-Handle. Das ist bei Filetype-Plugins üblich.
Beispielsweise könnte ein Markdown-Plugin :Preview nur innerhalb von Markdown-Buffern definieren und so den globalen Namensraum sauber halten.
vim.api.nvim_buf_create_user_command(0, 'Preview', function()
print('previewing this buffer')
end, {})Einführung in vim.keymap.set
vim.keymap.set ist die moderne API für Mappings. Sie akzeptiert einen Modus, die Tasten auf der linken Seite, eine Zeichenkette oder Lua-Funktion auf der rechten Seite sowie eine Optionentabelle.
Im Gegensatz zum älteren nvim_set_keymap akzeptiert sie direkt einen Lua-Callback auf der rechten Seite; eine Umhüllung mit <cmd>lua ist nicht erforderlich.
vim.keymap.set('n', '<leader>w', function()
vim.cmd('write')
end, { desc = 'Save file' })Modi und mehrere Mappings
Das Modusargument kann eine einzelne Zeichenkette wie 'n' oder eine Tabelle wie { 'n', 'v' } sein, um mehrere Modi gleichzeitig zu belegen.
Häufige Modi sind: n normal, i Einfügen, v visuell, x nur visuell, t Terminal. Eine leere Zeichenkette '' steht für normal, visuell und Operator-Ausstehend.
vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })Mapping-Optionen
Die opts-Tabelle steuert das Verhalten. silent = true unterdrückt die Befehlsausgabe, noremap ist aus Sicherheitsgründen standardmäßig true, und buffer = 0 beschränkt das Mapping auf den aktuellen Buffer.
Fügen Sie immer eine desc hinzu, damit die Ausgabe von which-key und :map lesbar bleibt.
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
buffer = 0, silent = true, desc = 'Go to definition',
})Expression-Mappings
Mit expr = true gibt die Funktion auf der rechten Seite die einzuspeisenden Tasten zurück. Damit lassen sich intelligente Mappings erstellen, bei denen sich etwa <Tab> je nachdem anders verhält, ob ein Vervollständigungsmenü sichtbar ist.
Geben Sie eine leere Zeichenkette zurück, um nichts zu tun, oder die literalen Tasten, die eingefügt werden sollen.
vim.keymap.set('i', '<Tab>', function()
return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })Mappings löschen
Entfernen Sie ein Mapping mit vim.keymap.del, indem Sie denselben Modus und dieselben Tasten übergeben. Fügen Sie außerdem ein Feld buffer hinzu, wenn das Mapping bufferlokal war.
Das ist bei Aufräumroutinen nützlich oder wenn ein Plugin eine Funktion deaktiviert und die ursprünglichen Zuordnungen des Benutzers wiederherstellen muss.
vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })Befehle und Keymaps gemeinsam
Ein sauberes Muster besteht darin, die Logik einmal zu definieren, sie als Benutzerbefehl bereitzustellen und eine Taste zuzuordnen, die diesen Befehl aufruft. So gibt es nur eine zentrale Quelle für die Logik.
Das Mapping auf <cmd>Hello<cr> beendet den visuellen Modus nicht und ist vorhersehbarer als :Hello<cr>.
vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })Kurzer Test
Prüfen Sie, wie sicher Sie Befehle und Keymaps beherrschen.
Zusammenfassung: Befehle und Keymaps
Sie können nun mit nvim_create_user_command Befehle erstellen, sie über nargs, range, bang und complete steuern und auf einzelne Buffer beschränken.
Für Mappings akzeptiert vim.keymap.set Lua-Callbacks, mehrere Modi und Optionen wie desc, silent, buffer und expr. Mit vim.keymap.del können Sie sie wieder entfernen.
Häufig gestellte Fragen
Ist die Lektion „Befehle und Keymaps“ kostenlos?
Ja — der vollständige Text von „Befehle und Keymaps“ 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 „Befehle und Keymaps“?
Fügen Sie nutzerseitige Aktionen hinzu. 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 2 von 4.
Wie lange dauert die Lektion „Befehle und Keymaps“?
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