API ภาษา Lua ของ Neovim
ปลั๊กอินเชื่อมต่อเข้ามาอย่างไร
API ภาษา Lua ของ Neovim เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ Lua ใน Neovim
Neovim ฝังสภาพแวดล้อมรันไทม์ LuaJIT ไว้ ทำให้ Lua เป็นภาษาสคริปต์แบบเนทีฟควบคู่กับ Vimscript ผู้เขียนปลั๊กอินจึงนิยมใช้ Lua เนื่องจากมีความเร็ว โครงสร้างข้อมูลที่เป็นรูปธรรม และระบบโมดูลที่เป็นระเบียบ
ตารางส่วนกลาง vim เป็นทางเข้าสู่ทุกสิ่ง ได้แก่ สถานะของตัวแก้ไข API ตัวเลือก และฟังก์ชันช่วยเหลือจากไลบรารีมาตรฐาน การทำความเข้าใจสิ่งนี้อย่างเชี่ยวชาญเป็นรากฐานของการพัฒนาปลั๊กอินสมัยใหม่
print(vim.inspect(vim.version()))ชั้น vim.api
vim.api เปิดให้ใช้ API ระยะไกลระดับต่ำ ซึ่งประกอบด้วยฟังก์ชันทุกตัวที่ขึ้นต้นด้วย nvim_ การเรียกเหล่านี้เป็นแบบเดียวกับที่ไคลเอนต์ภายนอกใช้ผ่าน RPC แต่เมื่อทำงานภายในกระบวนการเดียวกันจะทำงานได้ทันที
ฟังก์ชันอย่าง nvim_get_current_buf, nvim_buf_set_lines และ nvim_command ช่วยให้ควบคุมได้อย่างแม่นยำ ฟังก์ชันเหล่านี้มีความเสถียร มีเอกสารประกอบอย่างดี และเป็นรากฐานของปลั๊กอินระดับจริงจัง
local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)vim.fn — การเรียกใช้ฟังก์ชัน Vimscript
vim.fn เป็นตัวเชื่อมไปยังฟังก์ชันในตัวของ Vimscript สิ่งใดก็ตามที่เรียกใช้ได้ใน Vimscript เช่น expand() หรือ fnamemodify() จะสามารถเรียกใช้ได้ในรูปแบบ vim.fn.expand(...)
สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อยังไม่มี API แบบเนทีฟ อาร์กิวเมนต์และค่าที่ส่งคืนจะถูกแปลงระหว่างชนิดของ Lua และ Vimscript โดยอัตโนมัติ
local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)ตัวเลือก: vim.o, vim.bo, vim.wo
การตั้งค่าตัวเลือกทำผ่านตารางเมตา vim.o ใช้กับตัวเลือกระดับส่วนกลาง vim.bo ใช้กับตัวเลือกเฉพาะบัฟเฟอร์ และ vim.wo ใช้กับตัวเลือกเฉพาะหน้าต่าง
การกำหนดค่าทำได้ง่ายเพียงเขียนฟิลด์ วิธีนี้แทนที่การเรียก nvim_set_option ที่ยืดยาว และทำให้โค้ดการกำหนดค่าอ่านได้เป็นธรรมชาติยิ่งขึ้น
vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = falsevim.g และตัวแปรส่วนกลาง
vim.g ใช้อ่านและเขียนตัวแปร Vim ส่วนกลาง ปลั๊กอินมักเปิดให้กำหนดค่าตัวเลือกเปิดปิดไว้ที่นี่ เช่น vim.g.myplugin_enabled
การอ่านตัวแปรที่ยังไม่ได้ตั้งค่าจะส่งคืน nil ดังนั้นควรกำหนดค่าเริ่มต้นป้องกันไว้ นอกจากนี้ยังมีรูปแบบที่จำกัดขอบเขตอยู่ในระดับบัฟเฟอร์และหน้าต่าง คือ vim.b และ vim.w
vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)การแจ้งเตือนและการแสดงข้อความ
ใช้ vim.notify เพื่อแสดงข้อความให้ผู้ใช้เห็น ฟังก์ชันนี้รับสตริงข้อความและระดับบันทึกที่เป็นตัวเลือกจาก vim.log.levels
ตัวจัดการปลั๊กอินอย่าง noice หรือ notify สามารถดักรับข้อความเหล่านี้เพื่อแสดงส่วนติดต่อผู้ใช้ที่สวยงามยิ่งขึ้น สำหรับเอาต์พุตที่แสดงต่อผู้ใช้ ควรใช้ vim.notify แทน print โดยตรง
vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)การจัดกำหนดการด้วย vim.schedule
การเรียก API บางอย่างไม่อนุญาตให้ใช้ในบริบทเหตุการณ์แบบเร็ว เช่น ภายในการเรียกกลับบางประเภท vim.schedule จะเลื่อนฟังก์ชันไปทำงานในลูปหลัก ซึ่งเป็นบริบทที่ API ทั้งหมดปลอดภัยต่อการใช้งาน
วิธีนี้ช่วยหลีกเลี่ยงข้อผิดพลาด "E5560" ที่น่าหวาดหวั่นเมื่อแก้ไขบัฟเฟอร์จากบริบทแบบอะซิงโครนัสหรือบริบทคำสั่งอัตโนมัติ
vim.schedule(function()
vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)คำสั่งอัตโนมัติใน Lua
nvim_create_autocmd ใช้ลงทะเบียนตัวจัดการเหตุการณ์ คุณสามารถจัดกลุ่มคำสั่งเหล่านี้ด้วย nvim_create_augroup และตั้งค่า clear = true เพื่อป้องกันการซ้ำเมื่อโหลดใหม่
การเรียกกลับจะได้รับตารางเหตุการณ์ที่มีฟิลด์อย่าง buf และ match ทำให้ตัวจัดการทราบบริบทได้อย่างแม่นยำ
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 และตัวช่วยจัดการสตริง
Neovim มาพร้อมไลบรารีมาตรฐานที่มีความสามารถหลากหลาย vim.tbl_extend, vim.tbl_keys และ vim.split รองรับงานทั่วไปเกี่ยวกับตารางและสตริง
vim.tbl_deep_extend('force', defaults, opts) เป็นวิธีมาตรฐานสำหรับผสานการกำหนดค่าของผู้ใช้เข้ากับค่าเริ่มต้นของปลั๊กอิน
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 สำหรับการแก้จุดบกพร่อง
vim.inspect แปลงค่า Lua ใด ๆ ให้เป็นสตริงที่อ่านง่าย รวมถึงตารางที่ซ้อนกันหลายระดับ นี่เป็นวิธีที่รวดเร็วที่สุดในการทำความเข้าใจรูปแบบของค่าที่ส่งคืนจาก API
ใช้ร่วมกับ :lua print(vim.inspect(...)) หรือ :lua= expr ใน Neovim รุ่นใหม่เพื่อดูค่าตรวจสอบระหว่างการพัฒนาได้อย่างรวดเร็ว
local info = vim.api.nvim_get_mode()
print(vim.inspect(info))ข้อแลกเปลี่ยนระหว่าง API กับ Vimscript
ควรใช้ vim.api สำหรับการดำเนินการที่มีโครงสร้างและเสถียร หากไม่มีฟังก์ชันแบบเนทีฟ ให้ใช้ vim.fn หรือ vim.cmd เป็นทางเลือกสำรอง
vim.cmd เรียกใช้คำสั่ง ex ในรูปสตริง จึงเหมาะกับงานเฉพาะครั้งอย่าง vim.cmd('highlight ...') แต่ตรวจสอบโครงสร้างภายในได้ยากกว่าการเรียก API ที่มีชนิดข้อมูลชัดเจน
vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับส่วนต่าง ๆ ของ API Lua ใน Neovim
ทบทวน: API ของ Lua
ตอนนี้คุณรู้จักส่วนหลักต่าง ๆ แล้ว ได้แก่ vim.api สำหรับ API เนทีฟที่มีชนิดข้อมูลชัดเจน vim.fn สำหรับฟังก์ชัน Vimscript และ vim.cmd สำหรับคำสั่ง ex
ตัวเลือกทำงานผ่าน vim.o/bo/wo ตัวแปรทำงานผ่าน vim.g/b/w และตัวช่วยอย่าง vim.tbl_deep_extend, vim.notify และ vim.schedule ช่วยเติมเต็มชุดเครื่องมือของผู้เขียนปลั๊กอิน
คำถามที่พบบ่อย
บทเรียน “API ภาษา Lua ของ Neovim” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “API ภาษา Lua ของ Neovim” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “API ภาษา Lua ของ Neovim”
ปลั๊กอินเชื่อมต่อเข้ามาอย่างไร คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “API ภาษา Lua ของ Neovim” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- API ภาษา Lua ของ Neovim
- คำสั่งและแผนผังคีย์
- บัฟเฟอร์และหน้าต่าง
- จัดแพ็กเกจปลั๊กอิน