Puis-je utiliser des expressions régulières perl dans la ligne de commande vim?


27

Je veux utiliser des expressions régulières perl sur la ligne de commande vim. Par exemple, pour mettre en majuscule les mots de la ligne actuelle, vous pouvez taper:

:s/(\w+)/\u$1/g

De : help perl-patterns ... Les regex de Vim sont les plus similaires à Perl, en termes de ce que vous pouvez faire. La différence entre eux est principalement juste une notation uhhmm ... c'est comme dire que le chinois est similaire au grec, en termes de ce que vous pouvez communiquer. La différence est surtout juste de la notation. regex n'est rien d'autre que de la notation! Les différences sont gênantes si une notation est moins familière qu'une autre. C'est pourquoi les gens posent des questions sur perl en premier lieu!
dreftymac

Réponses:


19

Vous pouvez filtrer n'importe quelle ligne ou plage de lignes via une commande externe dans vim, en utilisant!. Par exemple, vous pouvez faire:

:.!perl -pe "s/(\w+)/\u\1/g"

qui filtrera la ligne actuelle via cette commande perl. (Ici :pour entrer en mode ligne de commande, et ce .qui suit signifie la ligne actuelle; vous pouvez également spécifier une plage de lignes ou %pour tout le fichier, etc.)

Si vous souhaitez utiliser les modèles de substitution intégrés de vim, le plus proche sera d'utiliser l'option "très magique" de vim, \ v, comme ceci:

:s/\v(\w+)/\u\1/g

voir :help patternet :help substitutepour plus de détails. Je ne pense pas que "très magique" soit tout à fait identique aux modèles de Perl, mais est très proche. Quoi qu'il en soit, vous pouvez toujours utiliser perl lui-même si vous êtes plus à l'aise avec lui, comme ci-dessus.


1
aussi, avec beaucoup de magie, vous n'avez pas à mémoriser ce qui (est traité spécialement alors qu'il {ne l'est pas: "tous les caractères ASCII sauf '0' - '9', 'a' - 'z', 'A' - 'Z' et "_" a une signification particulière. " Merci!
Ayrat

10

Non, vous ne pouvez pas utiliser les expressions régulières Perl de cette façon. Pour obtenir de l'aide sur l'apprentissage des équivalents Vim pour les composants d'expression régulière Perl, consultez

:help perl-patterns

Cependant, vous pouvez utiliser Perl comme filtre externe comme expliqué par frabjous. Vous pouvez également exécuter des commandes Perl dans Vim à l'aide de l'interface Perl, si votre Vim a été compilé avec la +perlfonctionnalité. Voir

:help if_perl.txt

2
+1, :help perl-patternsa résolu la seule chose que je détestais auparavant à propos de vim
Mark K Cowan

8

Vous pouvez aussi utiliser:

/\v"your regex"

au lieu de:

/"your regex"

C'est la réponse que je cherchais!
alextercete

Vous pouvez également vous aider en ajoutant nnoremap / /\vet vnoremap / /\và votre .vimrc afin que lorsque vous tapez, /cela fonctionne.
mattmc3


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.