Как упомянуто в комментарии @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
.