Как упомянуто в комментарии @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>после написания шаблона для поиска, сопоставление автоматически заменяет все алфавитные символы их эквивалентами класса эквивалентности.
Отображение for <CR>аналогично предыдущему отображению для c, за исключением того, что оно использует не аргумент, <expr>а системное отображение <C-\>e.
<expr>позволяет вставить оценку выражения, а <C-\>eтакже заменить всю командную строку оценкой выражения.
:h [[=и:h patterns-composing.