บัฟเฟอร์และหน้าต่าง
จัดการตัวแก้ไข
บัฟเฟอร์และหน้าต่าง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- API ภาษา Lua ของ Neovim
- คำสั่งและแผนผังคีย์
- บัฟเฟอร์และหน้าต่าง
- จัดแพ็กเกจปลั๊กอิน