Existe-t-il un modèle comme ^ dans vim?


20

En mode normal Vim, la 0commande vous amène à la première colonne de la ligne et ^vous amène au début logique de la ligne (par exemple, le premier caractère non blanc). Dans le monde regex, ^correspond au premier caractère de la ligne, espace ou non. Vim a-t-il un modèle qui se comporte comme sa commande '^' - correspondant au début logique d'une ligne?


Je pense que ^ dans une expression régulière correspond normalement au début de la ligne, pas au premier caractère. ^. correspondra au début, puis au premier caractère, pas au début, puis au deuxième caractère.
— bdsl

Réponses:


17

Il n'y a pas de raccourci pour faire correspondre le premier caractère non blanc sur une ligne, vous devez créer le motif vous-même, comme:

^\s*restofpattern

Si vous ne souhaitez pas inclure l'espace blanc dans votre correspondance, vous devez utiliser une assertion de largeur nulle, comme:

\(^\s*\)\@<=restofpattern

Pas vraiment joli, mais au moins ça fait le boulot.


6

Pour faire correspondre le premier caractère non blanc, vous devez simplement l'utiliser \Scomme vous le faites normalement.


Si vous utilisez ^une expression régulière dans vim, elle correspondra au début réel de la ligne, même si elle contient des espaces.

Par exemple, cette ligne commence par un espace:

 <- there's a space there you can't see :)

Cette commande vim supprimera l'espace de tête:

:%s/^ //

résultant en ce qui suit:

<- there's a space there you can't see :)

Ainsi, l'expression régulière se comportera comme vous vous y attendez, même si la commande ne le fait pas.


Je suppose que vous allez expliquer le downvote. Pour autant que je sache, cette réponse est correcte.
— Michael Hampton

1
Je n'ai pas voté contre, mais à titre de clarification: je me demandais si Vim avait un opérateur pour correspondre au premier caractère non blanc de la ligne. L' ^opérateur (comme toutes les implémentations rationnelles rationnelles), correspondra au premier caractère même s'il s'agit d'un espace.
— Michael

Eh bien, comment vous attendiez-vous à le faire normalement? Habituellement, dans une expression régulière, vous utiliseriez quelque chose comme \Spour faire correspondre le premier caractère non blanc.
— Michael Hampton

2
\Scorrespondra à tout caractère non blanc. Pour mettre une autre façon, je me demande si Vim a un raccourci zéro largeur pour cela: ^\W*\S.
— Michael

1
Aucun moteur à ma connaissance n'offre cette fonctionnalité, mais là encore - quand auriez-vous pris soin d'un moteur à usage général? Vim n'est pas un moteur d'expression régulière à usage général. C'est un éditeur qui a un moteur d'expression régulière, donc je me demandais s'il avait des constructions spéciales pour quelque chose qui n'a d'importance que dans un éditeur.
— Michael
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.