0Pricing
Lua Academy · บทเรียน

บัฟเฟอร์และหน้าต่าง

จัดการตัวแก้ไข

บัฟเฟอร์และหน้าต่าง เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

บัฟเฟอร์ หน้าต่าง และแท็บ

Neovim แยกเนื้อหาออกจากการแสดงผล บัฟเฟอร์เก็บข้อความไว้ในหน่วยความจำ หน้าต่างคือช่องมองที่แสดงบัฟเฟอร์ และแท็บคือรูปแบบการจัดวางหน้าต่าง

บัฟเฟอร์เดียวกันสามารถปรากฏในหลายหน้าต่างได้ ปลั๊กอินจะจัดการตัวจัดการเหล่านี้ ซึ่งเป็นจำนวนเต็ม ผ่านกลุ่ม API nvim_buf_* และ nvim_win_*

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

การอ่านบรรทัดจากบัฟเฟอร์

nvim_buf_get_lines(buf, start, end_, strict) ส่งคืนบรรทัดในรูปแบบรายการ ดัชนีเริ่มที่ศูนย์และไม่รวมตำแหน่งสิ้นสุด หากต้องการอ่านจนถึงบรรทัดสุดท้าย ให้ส่งค่า -1 เป็นตำแหน่งสิ้นสุด

การตั้งค่า strict_indexing เป็น false จะยอมรับดัชนีที่อยู่นอกช่วงแทนที่จะทำให้เกิดข้อผิดพลาด

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

การเขียนบรรทัดลงในบัฟเฟอร์

nvim_buf_set_lines แทนที่ช่วงบรรทัดด้วยข้อความใหม่ หากต้องการเพิ่มข้อความต่อท้าย ให้ตั้งค่าตำแหน่งเริ่มต้นและสิ้นสุดเป็น -1 ทั้งคู่ หากต้องการเขียนทับทั้งหมด ให้ใช้ 0, -1

ข้อความที่ใช้แทนที่เป็นรายการสตริงของ Lua โดยมีหนึ่งสตริงต่อหนึ่งบรรทัด และไม่มีอักขระขึ้นบรรทัดใหม่ต่อท้าย

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

บัฟเฟอร์ชั่วคราว

สร้างบัฟเฟอร์ที่ไม่แสดงในรายการและใช้แล้วทิ้งด้วย nvim_create_buf(listed, scratch) การส่งค่า false, true จะทำให้ได้บัฟเฟอร์ชั่วคราวที่เหมาะสำหรับส่วนติดต่อผู้ใช้ของปลั๊กอิน

ตั้งค่า bufhidden = 'wipe' เพื่อให้บัฟเฟอร์หายไปเมื่อหน้าต่างถูกปิด และป้องกันไม่ให้มีบัฟเฟอร์ตกค้าง

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

ตัวเลือกเฉพาะบัฟเฟอร์

ใช้ดัชนี vim.bo[buf] เพื่อตั้งค่าตัวเลือกเฉพาะบัฟเฟอร์ให้กับตัวจัดการที่ระบุ การตั้งค่าที่ปลั๊กอินใช้บ่อย ได้แก่ modifiable = false และ buftype = 'nofile'

การทำให้บัฟเฟอร์แสดงผลแก้ไขไม่ได้จะป้องกันไม่ให้ผู้ใช้แก้ไขเนื้อหาที่สร้างขึ้นโดยไม่ตั้งใจ

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

การเปิดหน้าต่างลอย

nvim_open_win(buf, enter, config) วางบัฟเฟอร์ไว้ในหน้าต่างลอย การกำหนดค่าจะระบุ relative, row, col, width, height และ border

หน้าต่างลอยเป็นพื้นฐานของส่วนติดต่อผู้ใช้สมัยใหม่ เช่น เอกสารเมื่อวางเมาส์ ตัวเลือก และการแจ้งเตือน

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

การกำหนดค่าหน้าต่าง

ปรับหน้าต่างลอยที่เปิดอยู่ด้วย nvim_win_set_config ซึ่งมีประโยชน์สำหรับการปรับขนาดเมื่อเกิด VimResized อ่านรูปแบบปัจจุบันได้ด้วย nvim_win_get_config

ตั้งค่าตัวเลือกเฉพาะหน้าต่างผ่าน vim.wo[win] เช่น ซ่อนบรรทัดเคอร์เซอร์หรือปิดคอลัมน์หมายเลขในแผงส่วนติดต่อผู้ใช้

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

เคอร์เซอร์และตำแหน่ง

ย้ายเคอร์เซอร์ด้วย nvim_win_set_cursor(win, {row, col}) โปรดสังเกตว่า row เริ่มนับจากหนึ่ง แต่ col เริ่มนับจากศูนย์ ซึ่งเป็นสาเหตุที่พบบ่อยของข้อผิดพลาดเลื่อนทีละหนึ่ง

อ่านตำแหน่งกลับได้ด้วย nvim_win_get_cursor เพื่อจดจำและคืนค่าตำแหน่งของผู้ใช้หลังการดำเนินการ

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

การตรวจสอบความถูกต้องและการล้างข้อมูล

ตัวจัดการอาจล้าสมัยได้ ควรตรวจสอบด้วย nvim_buf_is_valid และ nvim_win_is_valid ก่อนดำเนินการกับตัวจัดการที่เก็บไว้

ปิดหน้าต่างด้วย nvim_win_close(win, force) และลบบัฟเฟอร์ด้วย nvim_buf_delete(buf, { force = true }) ควรตรวจสอบความถูกต้องก่อนเสมอเพื่อหลีกเลี่ยงข้อผิดพลาด

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

เครื่องหมายขยายและพื้นที่ชื่อ

เครื่องหมายขยายจะยึดข้อมูลกำกับไว้กับข้อความ ซึ่งเคลื่อนตามการแก้ไข สร้างพื้นที่ชื่อด้วย nvim_create_namespace แล้วแนบข้อความเสมือนหรือการเน้นสี

nvim_buf_set_extmark รองรับ virt_text คอลัมน์สัญลักษณ์ และการเน้นสีในบรรทัด ซึ่งเป็นกลไกเบื้องหลังคำแนะนำแทรกในบรรทัดและปลั๊กอินตรวจสอบผู้แก้ไขของ git

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

การแสดงรายการและการวนซ้ำ

nvim_list_bufs และ nvim_list_wins คืนค่าตัวจัดการทั้งหมดที่มีอยู่ในขณะนั้น คุณสามารถกรองค่าดังกล่าวด้วย nvim_buf_is_loaded หรือตรวจสอบตัวเลือก

การวนซ้ำช่วยให้ปลั๊กอินทำงานตลอดทั้งเซสชันได้ เช่น ปิดหน้าต่างลอยทุกบาน หรือรีเฟรชบัฟเฟอร์แต่ละรายการของชนิดไฟล์ที่กำหนด

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

ตรวจสอบอย่างรวดเร็ว

ตรวจสอบความเข้าใจเกี่ยวกับบัฟเฟอร์และหน้าต่าง

ทบทวน: บัฟเฟอร์และหน้าต่าง

บัฟเฟอร์เก็บข้อความ หน้าต่างแสดงข้อความเหล่านั้น และตัวจัดการเป็นจำนวนเต็มที่ต้องตรวจสอบก่อนใช้งาน คุณสามารถอ่านและเขียนบรรทัด สร้างบัฟเฟอร์ชั่วคราว และตั้งค่าตัวเลือกเฉพาะบัฟเฟอร์

หน้าต่างลอยผ่าน nvim_open_win การควบคุมเคอร์เซอร์ เครื่องหมายขยาย และ API สำหรับแสดงรายการ มอบทุกสิ่งที่จำเป็นสำหรับสร้างส่วนติดต่อผู้ใช้ของปลั๊กอินที่มีฟังก์ชันครบถ้วนและรักษาสถานะได้

คำถามที่พบบ่อย

บทเรียน “บัฟเฟอร์และหน้าต่าง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “บัฟเฟอร์และหน้าต่าง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “บัฟเฟอร์และหน้าต่าง”

จัดการตัวแก้ไข คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “บัฟเฟอร์และหน้าต่าง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. API ภาษา Lua ของ Neovim
  2. คำสั่งและแผนผังคีย์
  3. บัฟเฟอร์และหน้าต่าง
  4. จัดแพ็กเกจปลั๊กอิน
← กลับไปที่ Lua Academy