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.