Bufory i okna
Będzie Pan/Pani manipulować edytorem.
Bufory i okna to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 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.
Bufory, okna i karty
Neovim oddziela treść od sposobu jej wyświetlania. Bufor przechowuje tekst w pamięci, okno jest widokiem na bufor, a karta stanowi układ okien.
Jeden bufor może być wyświetlany w wielu oknach. Wtyczki operują na tych uchwytach, będących liczbami całkowitymi, za pośrednictwem rodzin API nvim_buf_* i nvim_win_*.
local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)Odczytywanie wierszy bufora
nvim_buf_get_lines(buf, start, end_, strict) zwraca wiersze jako listę. Indeksy są numerowane od zera, a koniec zakresu jest wyłączny; należy przekazać -1 jako koniec, aby objąć ostatni wiersz.
Ustawienie strict_indexing na false pozwala tolerować indeksy spoza zakresu zamiast zgłaszać błąd.
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)Zapisywanie wierszy bufora
nvim_buf_set_lines zastępuje zakres nowym tekstem. Aby dodać tekst na końcu, należy ustawić zarówno początek, jak i koniec na -1. Aby nadpisać całą zawartość, należy użyć 0, -1.
Zastępowana zawartość to lista Lua złożona z ciągów znaków, po jednym na wiersz, bez końcowych znaków nowej linii.
vim.api.nvim_buf_set_lines(0, -1, -1, false, {
'-- appended line',
})Bufory scratch
Niezarejestrowany, jednorazowy bufor można utworzyć za pomocą nvim_create_buf(listed, scratch). Przekazanie false, true tworzy bufor scratch idealny dla interfejsu wtyczki.
Należy ustawić bufhidden = 'wipe', aby bufor znikał po zamknięciu jego okna i nie pozostawiał zbędnych buforów.
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' })Opcje lokalne dla bufora
Aby ustawić opcje lokalne dla konkretnego uchwytu bufora, należy użyć indeksu vim.bo[buf]. Typowe ustawienia wtyczek to modifiable = false i buftype = 'nofile'.
Ustawienie bufora wyświetlania jako niemodyfikowalnego zapobiega przypadkowemu edytowaniu generowanej zawartości przez użytkownika.
vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'Otwieranie okien pływających
nvim_open_win(buf, enter, config) umieszcza bufor w oknie pływającym. Konfiguracja określa relative, row, col, width, height i border.
Okna pływające stanowią podstawę nowoczesnego interfejsu, takiego jak dokumentacja wyświetlana po najechaniu, selektory i powiadomienia.
local win = vim.api.nvim_open_win(buf, true, {
relative = 'editor', row = 5, col = 10,
width = 40, height = 10, border = 'rounded',
})Konfiguracja okna
Otwarte okno pływające można dostosować za pomocą nvim_win_set_config, co przydaje się do zmiany rozmiaru po zdarzeniu VimResized. Bieżący układ można odczytać za pomocą nvim_win_get_config.
Opcje lokalne dla okna ustawia się przez vim.wo[win], na przykład ukrywając wiersz kursora lub wyłączając kolumny numerów w panelach interfejsu.
vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })Kursor i pozycja
Kursor można przesunąć za pomocą nvim_win_set_cursor(win, {row, col}). Należy pamiętać, że wiersz jest numerowany od jedynki, a kolumna od zera — to częsta przyczyna błędów o jeden.
Pozycję można odczytać ponownie za pomocą nvim_win_get_cursor, aby zapamiętać i przywrócić położenie użytkownika po wykonaniu operacji.
local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })Sprawdzanie poprawności i sprzątanie
Uchwyty mogą stać się nieaktualne. Przed użyciem zapisanych uchwytów należy sprawdzić je za pomocą nvim_buf_is_valid i nvim_win_is_valid.
Okna należy zamykać za pomocą nvim_win_close(win, force), a bufory usuwać przez nvim_buf_delete(buf, { force = true }). Zawsze należy najpierw sprawdzić poprawność uchwytu, aby uniknąć błędów.
if vim.api.nvim_win_is_valid(win) then
vim.api.nvim_win_close(win, true)
endExtmarki i przestrzenie nazw
Extmarki przypinają metadane do tekstu, który przesuwa się podczas edycji. Utwórz przestrzeń nazw za pomocą nvim_create_namespace, a następnie dodaj tekst wirtualny lub wyróżnienia.
nvim_buf_set_extmark obsługuje virt_text, kolumny znaków i wyróżnienia w tekście — to mechanizm używany przez podpowiedzi w tekście oraz wtyczki git blame.
local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
virt_text = { { ' hint', 'Comment' } },
})Listowanie i iterowanie
nvim_list_bufs i nvim_list_wins zwracają wszystkie aktualne uchwyty. Można je filtrować za pomocą nvim_buf_is_loaded lub przez sprawdzanie opcji.
Iterowanie pozwala wtyczce działać w całej sesji, na przykład zamknąć każde pływające okno albo odświeżyć każdy bufor określonego typu pliku.
for _, b in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_is_loaded(b) then print(b) end
endSzybki test
Sprawdźmy, czego nauczyli się Państwo o buforach i oknach.
Podsumowanie: bufory i okna
Bufory przechowują tekst, okna go wyświetlają, a uchwyty są liczbami całkowitymi, które należy sprawdzić przed użyciem. Można odczytywać i zapisywać wiersze, tworzyć bufory tymczasowe oraz ustawiać opcje lokalne dla bufora.
Pływające okna otwierane za pomocą nvim_open_win, sterowanie kursorem, extmarki i interfejsy API do listowania zapewniają wszystko, czego potrzeba do budowania rozbudowanych interfejsów wtyczek zachowujących stan.
Często zadawane pytania
Czy lekcja „Bufory i okna” jest bezpłatna?
Tak — pełny tekst „Bufory i okna” 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 „Bufory i okna”?
Będzie Pan/Pani manipulować edytorem. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Bufory i okna”?
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.