C'è uno schema come ^ in vim?


20

Nella modalità normale di Vim, il 0comando ti porta alla prima colonna della linea e ^ti porta all'inizio logico della linea (es. Il primo carattere non bianco). Nel mondo regex, ^corrisponde al primo personaggio sulla linea, spazi bianchi o meno. Vim ha un modello che si comporta come il suo comando '^' - corrispondente all'inizio logico di una linea?


Penso che ^ in una regex corrisponda normalmente all'inizio della riga, non al primo carattere. ^. corrisponderà all'inizio e quindi al primo carattere, non all'inizio e quindi al secondo carattere.
bdsl,

Risposte:


17

Non ci sono scorciatoie per abbinare il primo carattere non bianco su una linea, devi costruire tu stesso il modello, come:

^\s*restofpattern

Se non vuoi includere lo spazio bianco nella tua corrispondenza, devi usare un'asserzione di larghezza zero, come:

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

Non esattamente carino, ma almeno riesce a fare il lavoro.


6

Per abbinare il primo personaggio non bianco, dovresti semplicemente usarlo \Scome al solito.


Se lo usi ^in una regex in vim, corrisponderà al vero inizio della linea, anche se contiene spazi bianchi.

Ad esempio, questa riga inizia con uno spazio:

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

Questo comando vim rimuoverà lo spazio iniziale:

:%s/^ //

risultante nel seguente:

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

Quindi, la regex si comporterà come previsto, anche se il comando non lo fa.


Presumo che spiegherai il downvote. Questa risposta, per quanto ne so, è corretta.
Michael Hampton,

1
Non ho espresso il mio voto negativo, ma a titolo di chiarimento: mi chiedevo se Vim avesse un operatore che corrispondesse al primo carattere non bianco della riga. L' ^operatore (come tutte le implementazioni sane di regex), corrisponderà al primo carattere anche se è uno spazio bianco.
Michael,

Bene, come ti aspettavi di farlo normalmente? Di solito in una regex useresti qualcosa di simile \Sper abbinare il primo carattere non bianco.
Michael Hampton,

2
\Scorrisponderà a qualsiasi carattere non di spazi bianchi. Per dirla in altro modo, mi chiedo se Vim ha una scorciatoia di ampiezza zero per questo: ^\W*\S.
Michael,

1
Nessun motore di cui sono a conoscenza offre tale funzionalità, ma poi di nuovo: quando ti saresti preoccupato di un motore generico? Vim non è un motore regex generico. È un editor che ha un motore regex, quindi mi chiedevo se avesse dei costrutti speciali per qualcosa che conta solo all'interno di un editor.
Michael,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.