Polecenia i mapowania klawiszy
Doda Pan/Pani akcje dostępne dla użytkownika.
Polecenia i mapowania klawiszy to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Przegląd poleceń użytkownika
Polecenia użytkownika to polecenia wywoływane dwukropkiem, udostępniane przez wtyczkę, takie jak :Format lub :Telescope. Ich nazwa musi zaczynać się wielką literą.
nvim_create_user_command definiuje je w Lua, przyjmując nazwę, callback lub ciąg znaków oraz tabelę opcji. Zastępuje to polecenie :command z Vimscript.
vim.api.nvim_create_user_command('Hello', function()
print('Hello from my plugin')
end, {})Argumenty poleceń
Aby przyjmować argumenty, należy ustawić nargs na '0', '1', '*', '?' lub '+'. Callback otrzymuje tabelę opts z polami args, fargs i bang.
fargs to lista argumentów wstępnie podzielona według białych znaków — zazwyczaj właśnie jej należy używać.
vim.api.nvim_create_user_command('Greet', function(opts)
print('Hi ' .. opts.args)
end, { nargs = 1 })Polecenia z zakresem i bang
Należy przekazać range = true, aby przyjmować zakresy wierszy; callback odczytuje wtedy opts.line1 i opts.line2. Należy dodać bang = true, aby zezwolić na :Cmd!, wykrywane za pomocą opts.bang.
Flagi te pozwalają jednemu poleceniu działać inaczej dla zaznaczeń wizualnych lub wariantów wymuszonych.
vim.api.nvim_create_user_command('Sum', function(o)
print(o.line1 .. ' to ' .. o.line2)
end, { range = true })Uzupełnianie poleceń
Uzupełnianie za pomocą klawisza Tab zapewnia opcja complete. Można użyć wbudowanych typów, takich jak 'file' lub 'buffer', albo niestandardowej funkcji Lua.
Niestandardowy mechanizm uzupełniania otrzymuje częściowy argument i wiersz poleceń, a następnie zwraca listę kandydujących ciągów znaków.
vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
nargs = 1,
complete = function() return { 'red', 'green', 'blue' } end,
})Polecenia lokalne dla bufora
Aby ograniczyć polecenie do jednego bufora, należy użyć nvim_buf_create_user_command wraz z uchwytem bufora. Jest to częste w wtyczkach obsługujących typy plików.
Na przykład wtyczka Markdown może definiować :Preview wyłącznie w buforach Markdown, zachowując porządek w globalnej przestrzeni nazw.
vim.api.nvim_buf_create_user_command(0, 'Preview', function()
print('previewing this buffer')
end, {})Wprowadzenie do vim.keymap.set
vim.keymap.set to nowoczesne API mapowania. Przyjmuje tryb, klawisze lewej strony, ciąg znaków prawej strony lub funkcję Lua oraz tabelę opcji.
W przeciwieństwie do starego nvim_set_keymap przyjmuje bezpośrednio callback Lua jako prawą stronę, bez konieczności opakowywania go w <cmd>lua.
vim.keymap.set('n', '<leader>w', function()
vim.cmd('write')
end, { desc = 'Save file' })Tryby i wiele mapowań
Argument trybu może być pojedynczym ciągiem, takim jak 'n', albo tabelą, na przykład { 'n', 'v' }, aby jednocześnie mapować kilka trybów.
Typowe tryby to: n — normalny, i — wstawiania, v — wizualny, x — wyłącznie wizualny, t — terminalowy. Pusty ciąg '' oznacza tryb normalny, wizualny i oczekiwania na operator.
vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })Opcje mapowania
Tabela opts steruje zachowaniem. silent = true ukrywa echo polecenia, noremap ma domyślnie wartość true ze względów bezpieczeństwa, a buffer = 0 ogranicza mapowanie do bieżącego bufora.
Należy zawsze dodawać desc, aby dane wyświetlane przez which-key i :map pozostały czytelne.
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
buffer = 0, silent = true, desc = 'Go to definition',
})Mapowania wyrażeń
Przy ustawieniu expr = true funkcja prawej strony zwraca klawisze, które mają zostać przekazane dalej. Umożliwia to tworzenie inteligentnych mapowań, na przykład takiego, w którym <Tab> działa inaczej, gdy widoczne jest menu uzupełniania.
Należy zwrócić pusty ciąg, aby nic nie robić, albo dosłowne klawisze do wstawienia.
vim.keymap.set('i', '<Tab>', function()
return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })Usuwanie mapowań
Mapowanie usuwa się za pomocą vim.keymap.del, przekazując ten sam tryb i klawisze oraz pole buffer, jeśli mapowanie było lokalne dla bufora.
Przydaje się to w procedurach sprzątających lub wtedy, gdy wtyczka wyłącza funkcję i musi przywrócić pierwotne mapowania użytkownika.
vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })Polecenia i mapowania klawiszy razem
Dobrym wzorcem jest zdefiniowanie logiki raz, udostępnienie jej jako polecenia użytkownika i powiązanie z nią klawisza. Dzięki temu istnieje jedno źródło prawdy.
Mapowanie na <cmd>Hello<cr> pozwala pozostać w trybie wizualnym i jest bardziej przewidywalne niż :Hello<cr>.
vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })Szybkie sprawdzenie
Proszę sprawdzić swoją znajomość poleceń i mapowań klawiszy.
Podsumowanie: polecenia i mapowania klawiszy
Potrafią już Państwo tworzyć polecenia za pomocą nvim_create_user_command, sterować nimi przez nargs, range, bang i complete, a także ograniczać je do konkretnego bufora.
W przypadku mapowań vim.keymap.set przyjmuje callbacki Lua, wiele trybów oraz opcje takie jak desc, silent, buffer i expr, a do sprzątania służy vim.keymap.del.
Często zadawane pytania
Czy lekcja „Polecenia i mapowania klawiszy” jest bezpłatna?
Tak — pełny tekst „Polecenia i mapowania klawiszy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Polecenia i mapowania klawiszy”?
Doda Pan/Pani akcje dostępne dla użytkownika. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Polecenia i mapowania klawiszy”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- API Lua Neovima
- Polecenia i mapowania klawiszy
- Bufory i okna
- Pakowanie pluginu