0Pricing
Lua Academy · Pelajaran

Buffer dan Jendela

Manipulasi editor.

Buffer dan Jendela adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Buffer, Jendela, Tab

Neovim memisahkan isi dari tampilan. Buffer menyimpan teks di memori; jendela adalah area tampilan untuk sebuah buffer; halaman tab adalah tata letak beberapa jendela.

Satu buffer dapat muncul di banyak jendela. Plugin memanipulasi pegangan ini, yang berupa bilangan bulat, melalui kelompok API nvim_buf_* dan nvim_win_*.

local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)

Membaca Baris Buffer

nvim_buf_get_lines(buf, start, end_, strict) mengembalikan baris sebagai daftar. Indeks dimulai dari nol dan tidak mencakup batas akhir; berikan -1 sebagai batas akhir untuk mencapai baris terakhir.

Menetapkan strict_indexing ke false membuat indeks di luar rentang dapat ditoleransi, alih-alih menghasilkan kesalahan.

local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)

Menulis Baris Buffer

nvim_buf_set_lines mengganti rentang dengan teks baru. Untuk menambahkan teks di akhir, tetapkan batas awal dan akhir ke -1. Untuk menimpa semuanya, gunakan 0, -1.

Penggantinya adalah daftar string Lua, satu untuk setiap baris, tanpa karakter baris baru di akhir.

vim.api.nvim_buf_set_lines(0, -1, -1, false, {
  '-- appended line',
})

Buffer Sementara

Buat buffer sementara yang tidak terdaftar dan dapat dibuang dengan nvim_create_buf(listed, scratch). Meneruskan false, true akan membuat buffer sementara yang ideal untuk UI plugin.

Atur bufhidden = 'wipe' agar buffer tersebut hilang saat jendelanya ditutup dan tidak meninggalkan buffer sisa.

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' })

Opsi Khusus Buffer

Gunakan indeks vim.bo[buf] untuk menetapkan opsi khusus buffer pada pegangan tertentu. Pengaturan plugin yang umum mencakup modifiable = false dan buftype = 'nofile'.

Membuat buffer tampilan tidak dapat diubah mencegah pengguna mengedit isi yang dihasilkan secara tidak sengaja.

vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'

Membuka Jendela Mengambang

nvim_open_win(buf, enter, config) menempatkan buffer di jendela mengambang. Konfigurasi tersebut menetapkan relative, row, col, width, height, dan border.

Jendela mengambang menjadi dasar UI modern seperti dokumentasi saat kursor diarahkan, pemilih, dan notifikasi.

local win = vim.api.nvim_open_win(buf, true, {
  relative = 'editor', row = 5, col = 10,
  width = 40, height = 10, border = 'rounded',
})

Konfigurasi Jendela

Sesuaikan jendela mengambang yang terbuka dengan nvim_win_set_config, yang berguna untuk mengubah ukuran saat VimResized. Baca tata letak saat ini dengan nvim_win_get_config.

Tetapkan opsi khusus jendela melalui vim.wo[win], misalnya untuk menyembunyikan baris kursor atau menonaktifkan kolom nomor di panel UI.

vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })

Kursor dan Posisi

Pindahkan kursor dengan nvim_win_set_cursor(win, {row, col}). Perhatikan bahwa baris dimulai dari satu, sedangkan kolom dimulai dari nol; hal ini sering menyebabkan kesalahan selisih satu.

Baca kembali posisinya dengan nvim_win_get_cursor untuk mengingat dan memulihkan posisi pengguna sebelum dan sesudah suatu operasi.

local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })

Validitas dan Pembersihan

Pegangan dapat menjadi tidak lagi valid. Lindungi operasi dengan nvim_buf_is_valid dan nvim_win_is_valid sebelum menggunakan pegangan yang tersimpan.

Tutup jendela dengan nvim_win_close(win, force) dan hapus buffer melalui nvim_buf_delete(buf, { force = true }). Selalu lakukan validasi terlebih dahulu untuk menghindari kesalahan.

if vim.api.nvim_win_is_valid(win) then
  vim.api.nvim_win_close(win, true)
end

Penanda Ekstensi dan Ruang Nama

Penanda ekstensi menambatkan metadata ke teks yang ikut berpindah saat pengeditan berlangsung. Buat ruang nama dengan nvim_create_namespace, lalu lampirkan teks virtual atau penyorotan.

nvim_buf_set_extmark mendukung virt_text, kolom tanda, dan penyorotan sebaris, yang menjadi mesin di balik petunjuk sisipan dan pengaya atribusi git.

local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
  virt_text = { { ' hint', 'Comment' } },
})

Mencantumkan dan Melakukan Iterasi

nvim_list_bufs dan nvim_list_wins mengembalikan semua pengidentifikasi yang ada saat ini. Saring pengidentifikasi tersebut dengan nvim_buf_is_loaded atau dengan memeriksa opsi.

Melakukan iterasi memungkinkan pengaya bekerja di seluruh sesi, misalnya menutup setiap jendela mengambang atau menyegarkan setiap buffer dengan jenis berkas tertentu.

for _, b in ipairs(vim.api.nvim_list_bufs()) do
  if vim.api.nvim_buf_is_loaded(b) then print(b) end
end

Pemeriksaan Singkat

Verifikasi hal-hal yang telah Anda pelajari tentang buffer dan jendela.

Ringkasan: Buffer dan Jendela

Buffer menyimpan teks, jendela menampilkannya, dan pengidentifikasi berupa bilangan bulat yang harus Anda validasi sebelum digunakan. Anda dapat membaca dan menulis baris, membuat buffer sementara, serta menetapkan opsi khusus buffer.

Jendela mengambang melalui nvim_open_win, kendali kursor, penanda ekstensi, dan API pencantuman menyediakan semua yang diperlukan untuk membangun antarmuka pengaya yang kaya fitur dan mempertahankan status.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Buffer dan Jendela” gratis?

Ya — teks lengkap “Buffer dan Jendela” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Buffer dan Jendela”?

Manipulasi editor. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Buffer dan Jendela” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. API Lua Neovim
  2. Perintah dan Pemetaan Tombol
  3. Buffer dan Jendela
  4. Mengemas Plugin
← Kembali ke Lua Academy