Comment activer le REGEX étendu dans le VIM ?

L'absence de caractères qui devraient avoir une signification particulière dans les expressions rationnelles peut être très ennuyeuse. Mais VIM dispose d'une fonctionnalité intéressante appelée very magic! Voici comment l'utiliser.

Temps de lecture estimé : 5 minutes

Introduction

En général, il existe des moyens beaucoup moins fous de créer des expressions régulières que dans VIM. C’est pourquoi vous pouvez utiliser d’autres outils pour tester, valider et seulement ensuite importer vos expressions régulières dans l’éditeur de texte.

Gagnez du temps avec un bon testeur

Un testeur de regex intéressant est regex101.com, qui aide beaucoup lors de la composition d’une expression volumineuse. Il en existe d’autres très intéressants, mais celui-ci est mon préféré.

Une fois que vous avez trouvé l’expression parfaite, vous découvrez dans VIM que vous devez maintenant échapper des caractères qui ne devraient pas être littéraux ! Et vous devez ensuite les transformer en caractères spéciaux pour que tout fonctionne…

( { } ) Mais il existe une excellente solution, qui consiste à appeler une option interne appelée very magic, qui vous aidera beaucoup à éviter d’échapper des expressions régulières trop longues.

Très magique !

Ainsi, pour utiliser la magie, il suffit d’insérer une commande supplémentaire avant l’expression régulière : \v

(Magia) \1 very magicDans un exemple simple et peu créatif 😆, on marie le groupe 1 et on le ramène avec , en ajoutant , en ignorant tout ce qui n’est pas marié dans cette expression.

#sem very magic
:%s/\v\(Magia\) furta-cor/\1 very magic/g

#com very magic
:%s/\v(Magia) furta-cor/\1 very magic/g

Jusqu’à présent, tout va bien. Cela ne semble pas trop gêner. Mais prenons un exemple plus long, où le fait de ne pas utiliser beaucoup de magie peut être un vrai problème.

Nous avons 6 champs dans une liste de produits et nous devons faire quelques substitutions et insertions de lignes et de données pour les intégrer dans un fichier .txt pour générer NFe à partir de Sefaz.

1|9388552610010|Item A|44.0000|10.0404545455|441.78
2|9488542618041|Item B|3.0000|14.0980000000|70.49
3|9588532619058|Item C|41.0000|4.9614285714|69.46
4|9583522613157|Item D|9.0000|4.5585714286|223.37
5|9588122623188|Item E|18.0000|4.8527777778|87.35
6|9384562634201|Item F|14.0000|28.2492857143|395.49
7|9285562614225|Item G|17.0000|10.7370588235|182.53
8|9186562647232|Item H|8.0000|3.2850000000|26.28
9|9280562617256|Item I|36.0000|125.0611111111|4502.20
10|9188552617270|Item J|14.0000|15.4914285714|216.88
11|9178552627324|Item K|17.0000|5.2288235294|88.89

La liste a été insérée dans le texteur regex101.com, parfait, tous les champs correspondent.

Si vous l’insérez directement dans VIM, il ne fonctionnera tout simplement pas. \v Voici à quoi cela devrait ressembler, sans faire appel à la magie :

#sem very magic, lotado de escapes

:%s~^\(\d+\)\|\(\d\{13\}\)\|\(.*\)\|\(\d+\.\d\{4\}\)\|\(\d+\.\d\{10\}\)\|\(\d+\.\d\{2\}\)$~H|\1||\rI|\2||\3|49019900||5102|un|\4\|\5|\6||un|\4|\5|||||1|||||||\rM||\rN|\rN10d|0|103|\rO||||999|\rO07|99|0.00|\rO11|0.0000|0.0000|\rQ|\rQ04|07|\rS|\rS04|07|~g

Aujourd’hui, avec \v

#com very magic, mais legível, (mais) compatível com outros robôs de regex, como o do regex101, do sed -E etc

:%s~\v^(\d+)\|(\d{13})\|(.*)\|(\d+\.\d{4})\|(\d+\.\d{10})\|(\d+\.\d{2})$~H|\1||\rI|\2||\3|49019900||5102|un|\4\|\5|\6||un|\4|\5|||||1|||||||\rM||\rN|\rN10d|0|103|\rO||||999|\rO07|99|0.00|\rO11|0.0000|0.0000|\rQ|\rQ04|07|\rS|\rS04|07|~g

$1 $2 $3Note : les miroirs de groupe dans les différents moteurs de regex sont généralement appelés avec $ : , mais dans VIM c’est \1 \2 \3

Pour ne pas se heurter aux problèmes de la magie et profiter des bonnes choses, il y a une chose importante à savoir : plusieurs caractères qui n’ont pas de signification particulière dans d’autres robots de regex, en ont une ici, dans VIM.

\v @ % & ~L’utilisation de , permet de donner une signification particulière à certains caractères très étranges, tels que . Par conséquent, si vous avez besoin de ces caractères en tant que littéraux, échappez-les à l’aide de \

@%&~

:%s/\v\@\%\&\~

Une automatisation très magique

Malheureusement, il n’est pas possible de définir l’option très magique dans le fichier .vimrc. \v Vous devrez l’appliquer individuellement à toutes les expressions rationnelles que vous avez définies. Vous pouvez faire correspondre la combinaison /s pour générer un /s\v automatiquement en ajoutant le cnoremap dans votre ~/.vimrc (Merci à notre collègue Micael Levi pour l’astuce dans l’excellente communauté des expressions régulières de Telegram).

 " Mapeia s/ para /s\v
 cnoremap s/ s/\v


« Mapper /s à /s\v cnoremap s/ s/\v

Apprenez tout sur la très grande magie et les autres options magiques dans l’aide de VIM.

:help magic

(...) Use of "\v" means that after it, all ASCII characters except '0'-'9', 'a'-'z', 'A'-'Z' and '_' have special meaning: "very magic"

Des questions, des suggestions ? Faites-le nous savoir dans les commentaires !

Voir aussi

Comentários

Plus d'articles

Comment utiliser bc, la calculatrice d’obus

bc = bench calculator (calculatrice de banc).
Si vous ne connaissez pas encore la calculatrice de votre coquille, il est temps d’apprendre à vous en servir, même si son utilisation est très basique.
L’utilisation la plus triviale de ses fonctions devrait déjà répondre à la plupart de vos besoins.
Mais ne vous y trompez pas, il s’agit d’un logiciel très puissant qui doit absolument faire partie de vos préoccupations.

Lire l'article "

Codage/décodage d’URL avec sed

Il existe plusieurs façons d’encoder/décoder les URL.
Les programmeurs utilisent généralement des fonctions prêtes à l’emploi.
Mais savez-vous vraiment ce que font ces fonctions ?
Pour cet article, j’ai choisi sed comme outil pour remplacer les codes et je vous indiquerai les RFC qui traitent du sujet.

Lire l'article "

Comprendre comment personnaliser VIM sur MacOS

Si vous commencez déjà à maîtriser VIM, il est temps de passer aux étapes suivantes.
Dans cet article, je vais vous expliquer comment installer VIM pour MacOS de la manière que je considère la plus propre (vous pouvez vouloir l’installer différemment et c’est très bien) et comment configurer les plugins NerdTree, pour accéder à l’arborescence des répertoires ; Status Tab pour mettre quelques outils supplémentaires à l’écran (et ils rendent VIM très joli) ; et le plugin Git, pour faciliter le contrôle de version sans quitter l’application.
Bonne lecture !

Lire l'article "

Comment afficher les couleurs dans le terminal

Voulez-vous afficher des textes en couleurs, en gras, en italique, soulignés, etc.
La compréhension de quelques règles et codes rend la chose plus facile qu’il n’y paraît.
Apprenez à afficher des couleurs dans votre terminal avec la clarté de quelqu’un qui sait ce qu’il fait.

Lire l'article "
bureau-it.com