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:
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.
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
Réponses:
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 pattern
et:help substitute
pour 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.la source
(
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!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
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
+perl
fonctionnalité. Voirla source
:help perl-patterns
a résolu la seule chose que je détestais auparavant à propos de vimVous pouvez aussi utiliser:
au lieu de:
la source
nnoremap / /\v
etvnoremap / /\v
à votre .vimrc afin que lorsque vous tapez,/
cela fonctionne.Voici une solution de http://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(Vérifiez avec
:ver
cela+perl
ou+perl/dyn
est compilé dans.)la source
Utilisez le plugin eregex.vim . C'est très utile et je n'ai eu aucun problème avec ça.
la source