Apakah ada cara untuk menginstruksikan Vim bahwa saya ingin mengabaikan diakritik / aksen saat mencari? Sebagai contoh, saya ingin dapat mencari
kočička
dengan masuk
/kocicka
The ignorecase
dan smartcase
pilihan yang sangat berguna, tetapi mereka tampaknya tidak ada hubungannya dengan diakritik / aksen.
:h [[=
dan:h patterns-composing
.Jawaban:
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
dankocicka
dengan pola yang sama, Anda bisa menggunakan ini:di mana
[[=c=]]
kelas ekivalensi untukc
karakter.Untuk secara otomatis memasukkan kelas karakter ini setiap kali Anda menekan
c
saat melakukan pencarian, Anda dapat menggunakan pemetaan ini:yang bisa dipecah seperti ini:
<expr>
ketik evaluasi ekspresigetcmdtype() =~ '[?/]'
uji apakah Anda sedang menulis pencarian mundur atau maju'[[=c=]]'
mengembalikan kelas ekivalensi untukc
karakter jika tes sebelumnya berhasil'c'
kembalikanc
karakter sebaliknyaPemetaan sebelumnya memiliki 2 kelemahan:
c
karakterIni dapat ditingkatkan dengan memetakan kembali
<CR>
seperti ini: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 sebelumnyac
, 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.sumber
/kočička
cocokkocicka
, maka Anda dapat menggunakan'[[:lower:][:upper:]]'
sebagai gantinya'\a'
. Alternatif'[:alpha:]'
dan'\I'
sepertinya tidak bekerja dengan karakter multi-byte; namun,'[^[:punct:]]'
tampaknya berhasil (meskipun saya kurang yakin), dan saya kira membangun kelas kesetaraan Anda sendiri (misalnya,'[А-яЁё]'
) juga.