คำสั่งและแผนผังคีย์
เพิ่มการกระทำที่ผู้ใช้เรียกใช้ได้
คำสั่งและแผนผังคีย์ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมคำสั่งของผู้ใช้
คำสั่งของผู้ใช้คือคำสั่งแบบโคลอนที่ปลั๊กอินของคุณเปิดให้ใช้ เช่น :Format หรือ :Telescope โดยชื่อคำสั่งต้องขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่
nvim_create_user_command ใช้กำหนดคำสั่งเหล่านี้ใน Lua โดยรับชื่อ การเรียกกลับหรือสตริง และตารางตัวเลือก วิธีนี้แทนที่ :command ของ Vimscript
vim.api.nvim_create_user_command('Hello', function()
print('Hello from my plugin')
end, {})อาร์กิวเมนต์ของคำสั่ง
ตั้งค่า nargs เพื่อให้รับอาร์กิวเมนต์ได้ โดยใช้ค่า '0', '1', '*', '?' หรือ '+' การเรียกกลับจะได้รับตาราง opts ที่มี args, fargs และ bang
fargs คือรายการอาร์กิวเมนต์ที่แยกด้วยช่องว่างไว้แล้ว ซึ่งโดยปกติเป็นรูปแบบที่ต้องการใช้
vim.api.nvim_create_user_command('Greet', function(opts)
print('Hi ' .. opts.args)
end, { nargs = 1 })คำสั่งแบบช่วงและแบบ Bang
ส่งค่า range = true เพื่อให้รับช่วงบรรทัดได้ จากนั้นการเรียกกลับจะอ่านค่า opts.line1 และ opts.line2 เพิ่มค่า bang = true เพื่ออนุญาตให้ใช้ :Cmd! โดยตรวจสอบได้ผ่าน opts.bang
แฟล็กเหล่านี้ทำให้คำสั่งเดียวกันทำงานแตกต่างกันได้เมื่อใช้กับส่วนที่เลือกแบบวิชวลหรือรูปแบบที่บังคับ
vim.api.nvim_create_user_command('Sum', function(o)
print(o.line1 .. ' to ' .. o.line2)
end, { range = true })การเติมคำสั่งให้สมบูรณ์
เปิดใช้การเติมข้อความด้วยปุ่ม Tab โดยกำหนดตัวเลือก complete คุณสามารถใช้ตัวเลือกในตัวอย่าง 'file' หรือ 'buffer' หรือใช้ฟังก์ชัน Lua ที่กำหนดเอง
ตัวเติมข้อความที่กำหนดเองจะได้รับอาร์กิวเมนต์บางส่วนและบรรทัดคำสั่ง จากนั้นส่งคืนรายการสตริงตัวเลือก
vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
nargs = 1,
complete = function() return { 'red', 'green', 'blue' } end,
})คำสั่งเฉพาะบัฟเฟอร์
หากต้องการจำกัดคำสั่งให้ใช้กับบัฟเฟอร์เดียว ให้ใช้ nvim_buf_create_user_command พร้อมตัวจัดการบัฟเฟอร์ วิธีนี้พบได้บ่อยในปลั๊กอินตามชนิดไฟล์
ตัวอย่างเช่น ปลั๊กอิน Markdown อาจกำหนด :Preview ให้ใช้ได้เฉพาะภายในบัฟเฟอร์ Markdown เพื่อไม่ให้พื้นที่ชื่อส่วนกลางรก
vim.api.nvim_buf_create_user_command(0, 'Preview', function()
print('previewing this buffer')
end, {})ทำความรู้จักกับ vim.keymap.set
vim.keymap.set เป็น API สมัยใหม่สำหรับการแมป โดยรับโหมด ปุ่มด้านซ้าย สตริงหรือฟังก์ชัน Lua ด้านขวา และตารางตัวเลือก
ต่างจาก nvim_set_keymap แบบเก่า ตรงที่รับการเรียกกลับของ Lua โดยตรงเป็นฝั่งขวา จึงไม่ต้องครอบด้วย <cmd>lua
vim.keymap.set('n', '<leader>w', function()
vim.cmd('write')
end, { desc = 'Save file' })โหมดและการแมปหลายรายการ
อาร์กิวเมนต์โหมดอาจเป็นสตริงเดียวอย่าง 'n' หรือตารางอย่าง { 'n', 'v' } เพื่อแมปหลายโหมดพร้อมกัน
โหมดที่ใช้บ่อย ได้แก่ n โหมดปกติ, i โหมดแทรก, v โหมดวิชวล, x โหมดวิชวลเท่านั้น และ t โหมดเทอร์มินัล สตริงว่าง '' หมายถึงโหมดปกติ โหมดวิชวล และโหมดรอคำสั่งตัวดำเนินการ
vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })ตัวเลือกการแมป
ตาราง opts ใช้ควบคุมพฤติกรรม silent = true จะระงับการแสดงคำสั่ง noremap มีค่าเริ่มต้นเป็น true เพื่อความปลอดภัย และ buffer = 0 จะจำกัดการแมปให้ใช้กับบัฟเฟอร์ปัจจุบัน
ควรเพิ่ม desc เสมอ เพื่อให้เอาต์พุตของ which-key และ :map ยังคงอ่านเข้าใจได้
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
buffer = 0, silent = true, desc = 'Go to definition',
})การแมปแบบนิพจน์
เมื่อใช้ expr = true ฟังก์ชันฝั่งขวาจะส่งคืนปุ่มที่จะป้อน วิธีนี้ช่วยสร้างการแมปอัจฉริยะ เช่น ทำให้ <Tab> ทำงานแตกต่างกันเมื่อเมนูเติมข้อความปรากฏอยู่
ส่งคืนสตริงว่างเพื่อไม่ให้ทำอะไร หรือส่งคืนปุ่มจริงที่ต้องการแทรก
vim.keymap.set('i', '<Tab>', function()
return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })การลบการแมป
ลบการแมปด้วย vim.keymap.del โดยส่งโหมดและปุ่มเดิมเข้าไป พร้อมฟิลด์ buffer หากการแมปนั้นเป็นการแมประดับบัฟเฟอร์
วิธีนี้มีประโยชน์ในรูทีนล้างข้อมูล หรือเมื่อปลั๊กอินปิดคุณลักษณะและต้องคืนค่าการกำหนดปุ่มเดิมของผู้ใช้
vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })การใช้คำสั่งร่วมกับการแมปปุ่ม
รูปแบบที่เป็นระเบียบคือกำหนดตรรกะไว้เพียงครั้งเดียว เปิดให้ใช้เป็นคำสั่งของผู้ใช้ และผูกปุ่มที่เรียกคำสั่งนั้น วิธีนี้ทำให้มีแหล่งข้อมูลจริงเพียงแห่งเดียว
การแมปไปยัง <cmd>Hello<cr> ช่วยไม่ให้ออกจากโหมดวิชวล และคาดเดาได้มากกว่า :Hello<cr>
vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })ตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจของคุณเกี่ยวกับคำสั่งและการแมปปุ่ม
ทบทวน: คำสั่งและการแมปปุ่ม
ตอนนี้คุณสามารถสร้างคำสั่งด้วย nvim_create_user_command ควบคุมคำสั่งด้วย nargs, range, bang และ complete รวมถึงจำกัดขอบเขตคำสั่งแยกตามบัฟเฟอร์ได้แล้ว
สำหรับการแมป vim.keymap.set รองรับการเรียกกลับของ Lua หลายโหมด และตัวเลือกอย่าง desc, silent, buffer และ expr ส่วน vim.keymap.del ใช้สำหรับล้างการแมป
คำถามที่พบบ่อย
บทเรียน “คำสั่งและแผนผังคีย์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คำสั่งและแผนผังคีย์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คำสั่งและแผนผังคีย์”
เพิ่มการกระทำที่ผู้ใช้เรียกใช้ได้ คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คำสั่งและแผนผังคีย์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- API ภาษา Lua ของ Neovim
- คำสั่งและแผนผังคีย์
- บัฟเฟอร์และหน้าต่าง
- จัดแพ็กเกจปลั๊กอิน