Como o @muru mencionado no comentário , você pode usar uma classe de equivalência (descrita em :help /[[
) que parece ser uma expressão de classe de caractere avaliada como um conjunto de caracteres semelhantes (ou seja, são os mesmos depois de remover qualquer acento / diacrítico).
Por exemplo, para procurar kočička
e kocicka
com o mesmo padrão, você pode usar isto:
ko[[=c=]]i[[=c=]]ka
onde [[=c=]]
é a classe de equivalência para o c
personagem.
Para inserir automaticamente essa classe de caracteres sempre que você clicar em c
uma pesquisa, use este mapeamento:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
que pode ser dividido assim:
<expr>
digite a avaliação de uma expressão
getcmdtype() =~ '[?/]'
teste se você está escrevendo uma pesquisa para trás ou para frente
'[[=c=]]'
retorne a classe de equivalência para o c
caractere se o teste anterior for bem-sucedido
'c'
retornar o c
caractere caso contrário
O mapeamento anterior tem 2 desvantagens:
- cobre apenas o
c
personagem
- pode dificultar a leitura do padrão
Pode ser melhorado remapeando <CR>
assim:
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
Quando você pressiona <CR>
após escrever um padrão para uma pesquisa, o mapeamento substitui automaticamente todos os caracteres alfabéticos pelo equivalente da classe de equivalência.
O mapeamento para <CR>
é semelhante ao mapeamento anterior para c
, exceto que ele não usa o argumento, <expr>
mas o mapeamento do sistema <C-\>e
.
<expr>
permite inserir a avaliação de uma expressão, enquanto <C-\>e
permite substituir toda a linha de comando pela avaliação de uma expressão.
:h [[=
e:h patterns-composing
.