Pour faire correspondre un mot, on peut utiliser
\v(\w+)
Depuis l'aide de vim :h \w
:
\ w caractère de mot: [0-9A-Za-z_]
Cela fonctionne exactement comme décrit dans le manuel. Cependant, je veux faire correspondre des mots qui contiennent des caractères au a-z
- delà , par exemple
prästgården . La correspondance de l'expression régulière \v(\w+)
contre
prästgården donne lieu à trois correspondances, au lieu de cela:
prästgården
^^ ^^^ ^^^^
Comment faire correspondre des mots contenant des caractères au a-z
- delà ? Mon environnement local est défini sur l'anglais et si possible, je voudrais que cela reste ainsi.
Modifier: les mots peuvent ne pas appartenir à un seul lieu, par exemple
prästgården
treść
vim
regular-expression
Marco
la source
la source
[[:alpha:]]\+
dans ce cas) sont censées faire ce que vous voulez ici, mais selon les documents Vim (:help regex
), cela ne fonctionne pas: "Ces éléments ne fonctionnent que pour les caractères 8 bits." Il se trouve que cela fonctionne ici avec Vim 7.3 sur OS X 10.8, mais Vim 7.3 sur Linux ne fonctionne pas, donc je suppose qu'il y a quelque chose d'Apple spécifique à ce Vim qui le permet. Vous constaterez également que le faire via la liaison Vim Perl échoue également, même si Perl a une très bonne prise en charge Unicode. Vous devrez peut-être basculer vers un script Perl externe, afin de pouvoir activer la prise en charge complète d'Unicode.\p{Word}
place d'une classe de caractères POSIX. Il existe de nombreux cas d'exception dans la gestion des classes de caractères POSIX de Perl, que vous évitez lorsque vous utilisez des propriétés Unicode à la place.Réponses:
Vim (à partir de la version 7.3) est très limité en ce qui concerne la prise en charge des caractères non ASCII dans les modèles. En particulier,
\w
ne correspond qu'aux lettres ASCII, ce qui est d'une utilité limitée.Il existe quelques modèles de classe de caractères qui prennent en charge Unicode. Ce qui vous intéresse
\I
, qui correspond en gros aux lettres et uniquement aux lettres, plus_
et@
. Au moins sur Debian Squeeze (dans un environnement local UTF-8), il y a des erreurs; par exemple,×
et÷
correspondent à des lettres, mais toutes les lettres accentuées latines semblent être reconnues correctement.\I
peut être configuré via l'isident
option, au moins pour la partie ASCII.Si vous souhaitez un support sérieux Unicode, vous devrez vous fier à un outil externe. Par exemple,
perl -C -e '/\p{L}/'
pour faire correspondre les lettres UTF-8 (en supposant une locale UTF-8).la source
Utilisez
\k
. Voiriskeyword
option.la source
Cela fonctionne aussi pour le cyrillique
Un peu plus compliqué et échoue avec le cyrillique
Doc .
Testé sur Vim 7.4.
la source
[=l=]
à la liste qui couvriraitł
(par exemple złoty), etc. aussi. Mais cela échoue déjà pour le russe. Quoi qu'il en soit, merci pour le partage.