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?

Michael
la source
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.

Karl Bielefeldt
la source
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.

Michael Hampton
la source
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