Jak wspomniano w komentarzu @muru , możesz użyć klasy równoważności (opisanej w :help /[[
), która wydaje się być wyrażeniem klasy znaków ocenionym jako zestaw podobnych znaków (tj. Są takie same po usunięciu jakiegokolwiek akcentu / znaku diakrytycznego).
Na przykład, aby szukać kočička
iz kocicka
tym samym wzorem, możesz użyć tego:
ko[[=c=]]i[[=c=]]ka
gdzie [[=c=]]
jest klasą równoważności c
znaku.
Aby automatycznie wstawić tę klasę postaci za każdym razem, gdy trafisz c
podczas wyszukiwania, możesz użyć tego mapowania:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
które można podzielić w następujący sposób:
<expr>
wpisz ocenę wyrażenia
getcmdtype() =~ '[?/]'
sprawdź, czy piszesz wyszukiwanie do tyłu lub do przodu
'[[=c=]]'
zwraca klasę równoważności c
znaku, jeśli poprzedni test się powiódł
'c'
w c
przeciwnym razie zwróć znak
Poprzednie mapowanie ma 2 wady:
- obejmuje tylko
c
postać
- może utrudniać odczytanie wzoru
Można to poprawić, mapując w <CR>
następujący sposób:
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
Kiedy naciskasz <CR>
po napisaniu wzorca wyszukiwania, mapowanie automatycznie zastąpi wszystkie znaki alfabetyczne ich odpowiednikiem klasy równoważności.
Mapowanie dla <CR>
jest podobne do poprzedniego dla c
, z tym wyjątkiem, że nie używa argumentu, <expr>
ale mapowanie systemowe <C-\>e
.
<expr>
pozwala wstawić ocenę wyrażenia, a jednocześnie <C-\>e
zastąpić całą linię poleceń oceną wyrażenia.
:h [[=
i:h patterns-composing
.