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

คำสั่งและแผนผังคีย์

เพิ่มการกระทำที่ผู้ใช้เรียกใช้ได้

คำสั่งและแผนผังคีย์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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