Existe uma maneira de instruir o Vim que eu quero ignorar sinais diacríticos / acentos ao pesquisar? Por exemplo, eu gostaria de poder procurar
kočička
inserindo
/kocicka
As opções ignorecase
e smartcase
são muito úteis, mas parecem não ter nada a ver com sinais diacríticos / acentos.
:h [[=
e:h patterns-composing
.Respostas:
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
ekocicka
com o mesmo padrão, você pode usar isto:onde
[[=c=]]
é a classe de equivalência para oc
personagem.Para inserir automaticamente essa classe de caracteres sempre que você clicar em
c
uma pesquisa, use este mapeamento:que pode ser dividido assim:
<expr>
digite a avaliação de uma expressãogetcmdtype() =~ '[?/]'
teste se você está escrevendo uma pesquisa para trás ou para frente'[[=c=]]'
retorne a classe de equivalência para oc
caractere se o teste anterior for bem-sucedido'c'
retornar oc
caractere caso contrárioO mapeamento anterior tem 2 desvantagens:
c
personagemPode ser melhorado remapeando
<CR>
assim: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 parac
, 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.fonte
/kočička
correspondênciaskocicka
, poderá usar em'[[:lower:][:upper:]]'
vez de'\a'
. As alternativas'[:alpha:]'
e'\I'
não parecem funcionar com caracteres de vários bytes; no entanto,'[^[:punct:]]'
parece funcionar (embora eu tenha menos certeza), e acho que você também criaria sua própria classe de equivalência (por exemplo'[А-яЁё]'
).