Existe-t-il un moyen d'indiquer à Vim que je veux ignorer les signes diacritiques / les accents lors de la recherche? Par exemple, je voudrais pouvoir rechercher
kočička
en entrant
/kocicka
Les options ignorecase
et smartcase
sont très utiles, mais elles ne semblent avoir rien à voir avec les signes diacritiques / les accents.
:h [[=
et:h patterns-composing
.Réponses:
Comme @muru l'a mentionné dans le commentaire , vous pouvez utiliser une classe d'équivalence (décrite dans
:help /[[
) qui semble être une expression de classe de caractères évaluée comme un ensemble de caractères similaires (c'est-à-dire qui sont les mêmes une fois que vous supprimez tout accent / diacritique).Par exemple, pour rechercher
kočička
etkocicka
avec le même modèle, vous pouvez utiliser ceci:où
[[=c=]]
est la classe d'équivalence duc
personnage.Pour insérer automatiquement cette classe de caractères à chaque fois que vous frappez
c
lors d'une recherche, vous pouvez utiliser ce mappage:qui peut être décomposé comme ceci:
<expr>
taper l'évaluation d'une expressiongetcmdtype() =~ '[?/]'
tester si vous écrivez une recherche en arrière ou en avant'[[=c=]]'
renvoie la classe d'équivalence duc
caractère si le test précédent a réussi'c'
retourner lec
caractère sinonLa cartographie précédente présente 2 inconvénients:
c
personnageIl pourrait être amélioré en remappant
<CR>
comme ceci:Lorsque vous appuyez
<CR>
après avoir écrit un modèle pour une recherche, le mappage remplacera automatiquement tous les caractères alphabétiques par leur homologue de classe d'équivalence.Le mappage pour
<CR>
est similaire au mappage précédent pourc
, sauf qu'il n'utilise pas l'argument<expr>
mais le mappage système<C-\>e
.<expr>
vous permet d'insérer l'évaluation d'une expression, tout en<C-\>e
vous permettant de remplacer la ligne de commande entière par l'évaluation d'une expression.la source
/kočička
correspondanceskocicka
, vous pouvez utiliser à la'[[:lower:][:upper:]]'
place de'\a'
. Les alternatives'[:alpha:]'
et'\I'
ne semblent pas fonctionner avec des caractères multi-octets; cependant,'[^[:punct:]]'
semble fonctionner (bien que je sois moins sûr), et je suppose que vous construisez également votre propre classe d'équivalence (par exemple,'[А-яЁё]'
).