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

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 = false

vim.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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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