Lua Academy · Lekcja

API Lua Neovima

Dowiedzą się Państwo, jak pluginy podłączają się do edytora.

Lekcja 1 z 413 kroki

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 = false

vim.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.

Bezpłatny start

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

  1. API Lua Neovima
  2. Polecenia i mapowania klawiszy
  3. Bufory i okna
  4. Pakowanie pluginu
← Powrót do Lua Academy