Seperti @muru disebutkan dalam komentar , Anda bisa menggunakan kelas ekivalensi (dijelaskan dalam :help /[[
) yang tampaknya merupakan ekspresi kelas karakter yang dievaluasi sebagai seperangkat karakter yang sama (yaitu sama setelah Anda menghilangkan aksen / diakritik).
Misalnya, untuk mencari kočička
dan kocicka
dengan pola yang sama, Anda bisa menggunakan ini:
ko[[=c=]]i[[=c=]]ka
di mana [[=c=]]
kelas ekivalensi untuk c
karakter.
Untuk secara otomatis memasukkan kelas karakter ini setiap kali Anda menekan c
saat melakukan pencarian, Anda dapat menggunakan pemetaan ini:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
yang bisa dipecah seperti ini:
<expr>
ketik evaluasi ekspresi
getcmdtype() =~ '[?/]'
uji apakah Anda sedang menulis pencarian mundur atau maju
'[[=c=]]'
mengembalikan kelas ekivalensi untuk c
karakter jika tes sebelumnya berhasil
'c'
kembalikan c
karakter sebaliknya
Pemetaan sebelumnya memiliki 2 kelemahan:
- itu hanya mencakup
c
karakter
- itu bisa membuat polanya sulit dibaca
Ini dapat ditingkatkan dengan memetakan kembali <CR>
seperti ini:
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
Ketika Anda menekan <CR>
setelah menulis pola pencarian, pemetaan akan secara otomatis mengganti semua karakter alfabet dengan rekan kelas ekivalen mereka.
Pemetaan untuk <CR>
mirip dengan pemetaan sebelumnya c
, kecuali tidak menggunakan argumen <expr>
tetapi pemetaan sistem <C-\>e
.
<expr>
memungkinkan Anda untuk memasukkan evaluasi ekspresi, sementara <C-\>e
memungkinkan Anda untuk mengganti seluruh baris perintah dengan evaluasi ekspresi.
:h [[=
dan:h patterns-composing
.