ตามที่ @muru พูดถึงในความคิดเห็นคุณสามารถใช้คลาสสมมูล (อธิบายไว้ใน:help /[[
) ซึ่งดูเหมือนจะเป็นนิพจน์คลาสอักขระที่ประเมินว่าเป็นชุดของอักขระที่คล้ายกัน
ตัวอย่างเช่นหากต้องการค้นหาkočička
และkocicka
ใช้รูปแบบเดียวกันคุณสามารถใช้สิ่งนี้:
ko[[=c=]]i[[=c=]]ka
โดยที่[[=c=]]
เป็นคลาสเทียบเท่าสำหรับc
ตัวละคร
หากต้องการแทรกคลาสอักขระนี้โดยอัตโนมัติทุกครั้งที่คุณกดปุ่มc
ขณะทำการค้นหาคุณสามารถใช้การจับคู่นี้:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
ซึ่งสามารถพังทลายลงได้ดังนี้:
<expr>
พิมพ์การประเมินผลของการแสดงออก
getcmdtype() =~ '[?/]'
ทดสอบว่าคุณกำลังเขียนย้อนหลังหรือค้นหาไปข้างหน้า
'[[=c=]]'
ส่งคืนคลาสสมมูลของc
อักขระหากการทดสอบก่อนหน้านี้สำเร็จ
'c'
กลับc
ตัวละครเป็นอย่างอื่น
การแมปก่อนหน้ามี 2 ข้อบกพร่อง:
- ครอบคลุม
c
เฉพาะตัวละครเท่านั้น
- มันทำให้รูปแบบการอ่านยาก
มันสามารถปรับปรุงได้โดยทำการแมปใหม่<CR>
เช่นนี้
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
เมื่อคุณกด<CR>
หลังจากเขียนรูปแบบสำหรับการค้นหาการจับคู่จะแทนที่อักขระที่เป็นตัวอักษรทั้งหมดโดยอัตโนมัติ
การทำแผนที่สำหรับ<CR>
คล้ายกับการทำแผนที่ก่อนหน้านี้สำหรับc
ยกเว้นไม่ใช้อาร์กิวเมนต์แต่การทำแผนที่ระบบ<expr>
อนุญาตให้คุณแทรกการประเมินผลของนิพจน์ในขณะที่อนุญาตให้คุณแทนที่บรรทัดคำสั่งทั้งหมดด้วยการประเมินผลของนิพจน์<C-\>e
<expr>
<C-\>e
:h [[=
:h patterns-composing