API Lua Neovima
Dowiedzą się Państwo, jak pluginy podłączają się do edytora.
API Lua Neovima to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 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.
Dlaczego Lua w Neovim
Neovim zawiera środowisko uruchomieniowe LuaJIT, dzięki czemu Lua jest natywnym językiem skryptowym obok Vimscript. Autorzy wtyczek preferują Lua ze względu na szybkość, rzeczywiste struktury danych i przejrzysty system modułów.
Globalna tabela vim jest bramą do wszystkiego: stanu edytora, API, opcji i pomocniczych funkcji biblioteki standardowej. Jej opanowanie stanowi podstawę nowoczesnego tworzenia wtyczek.
print(vim.inspect(vim.version()))Warstwa vim.api
vim.api udostępnia niskopoziomowe zdalne API: każdą funkcję z prefiksem nvim_. Są to te same wywołania, których zewnętrzni klienci używają przez RPC, ale w obrębie procesu wykonują się natychmiast.
Funkcje takie jak nvim_get_current_buf, nvim_buf_set_lines i nvim_command zapewniają precyzyjną kontrolę. Są stabilne, dobrze udokumentowane i stanowią podstawę zaawansowanych wtyczek.
local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)vim.fn — wywoływanie funkcji Vimscript
vim.fn łączy Lua z wbudowanymi funkcjami Vimscript. Wszystko, co można wywołać w Vimscript, na przykład expand() lub fnamemodify(), jest dostępne jako vim.fn.expand(...).
Jest to niezwykle przydatne, gdy nie istnieje jeszcze natywne API. Argumenty i wartości zwracane są automatycznie konwertowane między typami Lua i Vimscript.
local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)Opcje: vim.o, vim.bo, vim.wo
Opcje ustawia się za pomocą metatabel. vim.o dotyczy opcji globalnych, vim.bo opcji lokalnych dla bufora, a vim.wo opcji lokalnych dla okna.
Przypisanie jest tak proste jak zapis do pola. Zastępuje to rozwlekłe wywołania nvim_set_option i dobrze pasuje do kodu konfiguracyjnego.
vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = falsevim.g i zmienne globalne
vim.g odczytuje i zapisuje globalne zmienne Vima. Wtyczki często udostępniają tutaj przełączniki konfiguracji, na przykład vim.g.myplugin_enabled.
Odczyt nieustawionej zmiennej zwraca nil, dlatego należy stosować wartości domyślne. Istnieją także warianty o zasięgu bufora i okna: vim.b oraz vim.w.
vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)Powiadomienia i echo
Należy używać vim.notify, aby wyświetlać użytkownikowi komunikaty. Funkcja przyjmuje ciąg komunikatu oraz opcjonalny poziom logowania z vim.log.levels.
Menedżery wtyczek, takie jak noice lub notify, mogą przechwytywać te komunikaty i prezentować je w atrakcyjniejszym interfejsie. W przypadku komunikatów dla użytkownika należy preferować vim.notify zamiast surowego print.
vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)Planowanie za pomocą vim.schedule
Niektóre wywołania API są zabronione w kontekstach szybkich zdarzeń, na przykład wewnątrz określonych callbacków. vim.schedule odracza wykonanie funkcji do głównej pętli, w której całe API jest bezpieczne.
Pozwala to uniknąć budzących grozę błędów „E5560” podczas modyfikowania buforów w kontekstach asynchronicznych lub autokomend.
vim.schedule(function()
vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)Autokomendy w Lua
nvim_create_autocmd rejestruje procedury obsługi zdarzeń. Należy grupować je za pomocą nvim_create_augroup i ustawić clear = true, aby uniknąć duplikatów po przeładowaniu.
Callback otrzymuje tabelę zdarzenia z polami takimi jak buf i match, co zapewnia precyzyjny kontekst dla procedury obsługi.
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 i pomocnicze funkcje tekstowe
Neovim udostępnia bogatą bibliotekę standardową. Funkcje vim.tbl_extend, vim.tbl_keys i vim.split obejmują typowe operacje na tabelach i łańcuchach znaków.
vim.tbl_deep_extend('force', defaults, opts) to kanoniczny sposób scalania konfiguracji użytkownika z domyślnymi ustawieniami wtyczki, tak aby konfiguracja użytkownika je nadpisywała.
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 do debugowania
vim.inspect serializuje dowolną wartość Lua do czytelnego ciągu znaków, w tym zagnieżdżone tabele. To najszybszy sposób na zrozumienie struktur wartości zwracanych przez API.
Podczas tworzenia można połączyć ją z :lua print(vim.inspect(...)) albo użyć :lua= expr w nowszych wersjach Neovim, aby szybko przeprowadzić inspekcję.
local info = vim.api.nvim_get_mode()
print(vim.inspect(info))Wybór między API a Vimscript
Należy preferować vim.api w przypadku stabilnych, ustrukturyzowanych operacji. Gdy nie istnieje natywna funkcja, należy użyć vim.fn lub vim.cmd.
vim.cmd wykonuje polecenia ex jako ciągi znaków i przydaje się w jednorazowych przypadkach, takich jak vim.cmd('highlight ...'), ale zapewnia mniej możliwości introspekcji niż typowane wywołania API.
vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')Szybkie sprawdzenie
Proszę sprawdzić swoją znajomość API Lua w Neovim.
Podsumowanie: API Lua
Znają już Państwo podstawowe warstwy: vim.api jako typowane natywne API, vim.fn do funkcji Vimscript oraz vim.cmd do poleceń ex.
Opcje obsługuje się przez vim.o/bo/wo, zmienne przez vim.g/b/w, a funkcje pomocnicze, takie jak vim.tbl_deep_extend, vim.notify i vim.schedule, uzupełniają zestaw narzędzi autora wtyczki.
Ucz się Lua dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 40
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „API Lua Neovima” jest bezpłatna?
Tak — pełny tekst „API Lua Neovima” 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 „API Lua Neovima”?
Dowiedzą się Państwo, jak pluginy podłączają się do edytora. Ć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 1 z 4.
Ile czasu zajmuje lekcja „API Lua Neovima”?
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