จัดแพ็กเกจปลั๊กอิน
จัดโครงสร้างและแบ่งปันปลั๊กอิน
จัดแพ็กเกจปลั๊กอิน เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
โครงสร้างไดเรกทอรีปลั๊กอิน
ปลั๊กอิน Neovim เป็นเพียงไดเรกทอรีบน runtimepath โครงสร้างตามแบบแผนมีโฟลเดอร์ระดับบนสุดที่ Neovim จัดการเป็นพิเศษ
ไดเรกทอรีสำคัญ ได้แก่ lua/ สำหรับมอดูล plugin/ สำหรับการตั้งค่าที่โหลดอัตโนมัติ ftplugin/ สำหรับสคริปต์ชนิดไฟล์ doc/ สำหรับเอกสารช่วยเหลือ และ after/ สำหรับการกำหนดทับภายหลัง
-- myplugin/
-- lua/myplugin/init.lua
-- plugin/myplugin.lua
-- doc/myplugin.txtไดเรกทอรี lua/
ไฟล์ภายใต้ lua/ สามารถเข้าถึงได้ด้วย require มอดูลที่ lua/myplugin/init.lua จะถูกโหลดเป็น require('myplugin')
การซ้อนโฟลเดอร์จะสอดคล้องกับเส้นทางแบบจุด: lua/myplugin/config.lua จะกลายเป็น require('myplugin.config') นี่คือวิธีที่ปลั๊กอินเปิดเผยพื้นที่ชื่อสาธารณะที่เป็นระเบียบ
-- in lua/myplugin/init.lua
local M = {}
function M.hello() print('hi') end
return Mการคืนตารางมอดูล
รูปแบบมอดูลตามสำนวนที่ใช้กันทั่วไปจะประกาศตารางเฉพาะที่ M แนบฟังก์ชัน แล้วคืนตารางนั้น ผู้เรียกจึงเข้าถึงได้ด้วย require('myplugin').hello()
เก็บฟังก์ชันช่วยภายในเป็นตัวแปรเฉพาะที่ธรรมดา เพื่อให้เฉพาะส่วนติดต่อที่ตั้งใจไว้เป็นสาธารณะ แนวทางนี้คล้ายการห่อหุ้มมอดูลในระบบนิเวศอื่น ๆ
local M = {}
local function private() end
function M.run() private() end
return Mข้อตกลง setup()
ปลั๊กอินส่วนใหญ่มีฟังก์ชัน setup(opts) ซึ่งรวมตัวเลือกของผู้ใช้เข้ากับค่าเริ่มต้น โดยให้ค่าของผู้ใช้ทับค่าเริ่มต้น และดำเนินการเริ่มต้นระบบ เช่น สร้างคำสั่งและคำสั่งทำงานอัตโนมัติ
ใช้ vim.tbl_deep_extend('force', defaults, opts or {}) เพื่อให้การตั้งค่าบางส่วนของผู้ใช้ยังคงได้รับค่าเริ่มต้นทั้งหมด
local M = {}
local defaults = { width = 40 }
function M.setup(opts)
M.config = vim.tbl_deep_extend('force', defaults, opts or {})
end
return Mไดเรกทอรี plugin/
สคริปต์ใน plugin/ จะทำงานโดยอัตโนมัติเมื่อ Neovim เริ่มทำงาน หลังจากสร้าง runtimepath แล้ว ควรให้สคริปต์เหล่านี้มีขนาดเล็กมาก
งานทั่วไปคือการลงทะเบียนคำสั่งหรือกลไกป้องกัน เพื่อให้มอดูลที่ใช้ทรัพยากรมากโหลดเมื่อจำเป็น หลีกเลี่ยงงานที่ใช้ทรัพยากรมากที่นี่ เลื่อนไปทำใน setup หรือคำสั่งทำงานอัตโนมัติ เพื่อให้เริ่มต้นได้รวดเร็ว
-- in plugin/myplugin.lua
if vim.g.loaded_myplugin then return end
vim.g.loaded_myplugin = trueกลไกป้องกันการโหลดซ้ำ
กลไกป้องกันการโหลดจะป้องกันการเริ่มต้นซ้ำหากไฟล์ถูกอ่านเข้ามาสองครั้ง ตั้งค่าสถานะ vim.g.loaded_* แล้วหยุดทำงานทันทีเมื่อถูกเรียกซ้ำ
สิ่งนี้จำเป็น เพราะตัวจัดการปลั๊กอินและ :runtime อาจอ่านไฟล์ซ้ำ และคำสั่งหรือคำสั่งทำงานอัตโนมัติที่ซ้ำกันจะทำให้เกิดบั๊กที่สังเกตได้ยาก
if vim.g.loaded_myplugin == 1 then return end
vim.g.loaded_myplugin = 1การโหลดเมื่อจำเป็น
การเริ่มต้นที่รวดเร็วหมายถึงการโหลดโค้ดเฉพาะเมื่อจำเป็น ลงทะเบียนคำสั่งขนาดเล็กใน plugin/ ซึ่งเรียกใช้มอดูลขนาดใหญ่เมื่อใช้งานครั้งแรก
ตัวจัดการปลั๊กอินอย่าง lazy.nvim ทำให้แนวทางนี้เป็นระบบด้วยตัวกระตุ้น cmd ft และ keys ดังนั้นมอดูลของคุณจะยังไม่ถูกแตะต้องจนกว่าจะถูกเรียกใช้
vim.api.nvim_create_user_command('MyStart', function()
require('myplugin').run()
end, {})เส้นทางรันไทม์และเส้นทางแพ็กเกจ
Neovim ค้นพบปลั๊กอินโดยสแกน runtimepath ระบบแพ็กเกจดั้งเดิมจะโหลดไดเรกทอรีใต้ pack/*/start/ โดยอัตโนมัติ และโหลด pack/*/opt/ เมื่อต้องการผ่าน :packadd
ผู้ใช้ส่วนใหญ่พึ่งพาตัวจัดการ แต่การเข้าใจ runtimepath จะช่วยอธิบายว่าระบบค้นหาโฟลเดอร์ของคุณอย่างไร
print(vim.o.runtimepath:sub(1, 60))
-- :packadd loads an opt plugin manuallyการตรวจสอบสุขภาพ
จัดเตรียม lua/myplugin/health.lua ที่มีฟังก์ชัน check เพื่อให้ผู้ใช้เรียกใช้ :checkhealth myplugin ได้ รายงานสถานะด้วย API vim.health
ใช้ vim.health.start vim.health.ok vim.health.warn และ vim.health.error เพื่อแสดงการพึ่งพาที่ขาดหายอย่างชัดเจน
local M = {}
function M.check()
vim.health.start('myplugin')
vim.health.ok('all good')
end
return Mเอกสารและป้ายกำกับ
ส่งมอบไฟล์ช่วยเหลือ doc/myplugin.txt เรียกใช้ :helptags doc/ (หรือปล่อยให้ตัวจัดการดำเนินการ) เพื่อสร้างดัชนีป้ายกำกับ ทำให้ :help myplugin ใช้งานได้
เอกสารที่ดีควรระบุคำสั่ง ตัวเลือกของ setup และการกำหนดปุ่มลัดเริ่มต้น ทำให้ค้นพบปลั๊กอินได้จากภายใน Neovim
-- generate tags from the doc directory
vim.cmd('helptags ' .. vim.fn.expand('%:p:h'))การจัดการเวอร์ชันและการเผยแพร่
ฝากปลั๊กอินไว้ในคลัง git ผู้ใช้ติดตั้งผ่านเส้นทาง owner/repo กำหนดแท็กให้รุ่นต่าง ๆ ตามรูปแบบเวอร์ชันเชิงความหมาย เพื่อให้ตัวจัดการสามารถตรึงเวอร์ชันได้
ใส่ README พร้อมตัวอย่างคำสั่งติดตั้งสำหรับตัวจัดการยอดนิยม ใบอนุญาต และตัวอย่างการตั้งค่าขั้นต่ำ เพื่อลดอุปสรรคในการเริ่มใช้งาน
-- lazy.nvim spec
-- { 'owner/myplugin', config = function()
-- require('myplugin').setup({})
-- end }ตรวจสอบอย่างรวดเร็ว
ยืนยันความเข้าใจเกี่ยวกับการจัดแพ็กเกจปลั๊กอิน
ทบทวน: การจัดแพ็กเกจปลั๊กอิน
ปลั๊กอินคือไดเรกทอรี runtimepath ที่มีมอดูลใน lua/ สคริปต์ plugin/ ที่ทำงานอัตโนมัติ และไฟล์เสริมอย่าง doc/ ftplugin/ และไฟล์ตรวจสอบสุขภาพ
คืนตารางมอดูล เปิดเผย setup ที่รวมค่าเริ่มต้น ป้องกันการโหลดซ้ำ โหลดโค้ดที่ใช้ทรัพยากรมากเมื่อจำเป็น จัดทำเอกสารด้วยแท็กช่วยเหลือ และเผยแพร่ผ่าน git พร้อมแท็กเวอร์ชันตามความหมาย
คำถามที่พบบ่อย
บทเรียน “จัดแพ็กเกจปลั๊กอิน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “จัดแพ็กเกจปลั๊กอิน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “จัดแพ็กเกจปลั๊กอิน”
จัดโครงสร้างและแบ่งปันปลั๊กอิน คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “จัดแพ็กเกจปลั๊กอิน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- API ภาษา Lua ของ Neovim
- คำสั่งและแผนผังคีย์
- บัฟเฟอร์และหน้าต่าง
- จัดแพ็กเกจปลั๊กอิน