Есть ли способ указать Vim, что я хочу игнорировать диакритические знаки / акценты при поиске? Например, я хотел бы иметь возможность искать
kočička
введя
/kocicka
ignorecase
И smartcase
варианты очень полезны, но они , кажется, не имеют ничего общего с диакритическими / акцентами.
:h [[=
и:h patterns-composing
.Ответы:
Как упомянуто в комментарии @muru , вы можете использовать класс эквивалентности (описанный в
:help /[[
), который, по-видимому, является выражением класса символов, оцениваемым как набор похожих символов (т. Е. Одинаковыми после удаления любого ударения / диакритики).Например, чтобы искать
kočička
и использоватьkocicka
тот же шаблон, вы можете использовать это:где
[[=c=]]
класс эквивалентности дляc
персонажа.Чтобы автоматически вставить этот класс символов всякий раз, когда вы нажимаете
c
во время поиска, вы можете использовать это отображение:который может быть разбит так:
<expr>
введите оценку выраженияgetcmdtype() =~ '[?/]'
проверить, пишете ли вы поиск вперед или назад'[[=c=]]'
вернуть класс эквивалентности дляc
символа, если предыдущий тест прошел успешно'c'
вернутьc
символ в противном случаеПредыдущее отображение имеет 2 недостатка:
c
характерЭто можно улучшить, переназначив
<CR>
так:Когда вы нажимаете
<CR>
после написания шаблона для поиска, сопоставление автоматически заменяет все алфавитные символы их эквивалентами класса эквивалентности.Отображение for
<CR>
аналогично предыдущему отображению дляc
, за исключением того, что оно использует не аргумент,<expr>
а системное отображение<C-\>e
.<expr>
позволяет вставить оценку выражения, а<C-\>e
также заменить всю командную строку оценкой выражения.источник
/kočička
совпаденияkocicka
, то вы можете использовать'[[:lower:][:upper:]]'
вместо'\a'
. Альтернативы'[:alpha:]'
и'\I'
, похоже, не работают с многобайтовыми символами; однако,'[^[:punct:]]'
кажется, работает (хотя я менее уверен), и я бы предположил, что вы также создадите свой собственный класс эквивалентности (например,'[А-яЁё]'
).