Gibt es ein Muster wie ^ in vim?

20

Im Vim-Normalmodus 0führt Sie der Befehl zur ersten Spalte in der Zeile und ^zum logischen Zeilenanfang (z. B. dem ersten Nicht-Leerzeichen). Entspricht in der Regex-Welt ^dem ersten Zeichen in der Zeile, Leerzeichen oder nicht. Verfügt Vim über ein Muster, das sich wie der Befehl '^' verhält - passend zum logischen Anfang einer Zeile?

Michael
quelle
Ich denke, ^ in einem regulären Ausdruck stimmt normalerweise mit dem Zeilenanfang überein, nicht mit dem ersten Zeichen. ^. wird mit dem Start und dann mit dem ersten Zeichen übereinstimmen, nicht mit dem Start und dann mit dem zweiten Zeichen.
BDSL

Antworten:

17

Es gibt keine Abkürzung für das erste Nicht-Leerzeichen in einer Zeile. Sie müssen das Muster wie folgt selbst erstellen:

^\s*restofpattern

Wenn Sie das Leerzeichen nicht in Ihre Übereinstimmung einbeziehen möchten, müssen Sie eine Behauptung mit der Breite Null verwenden, z.

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

Nicht gerade hübsch, aber es erledigt zumindest die Arbeit.

Karl Bielefeldt
quelle
6

Um das erste Nicht- Leerzeichen abzugleichen, verwenden Sie es \Swie gewohnt .


Wenn Sie ^in vim einen regulären Ausdruck verwenden, entspricht dieser dem tatsächlichen Zeilenanfang, auch wenn er Leerzeichen enthält.

Diese Zeile beginnt beispielsweise mit einem Leerzeichen:

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

Dieser vim-Befehl entfernt das führende Leerzeichen:

:%s/^ //

was zu folgendem führt:

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

Der reguläre Ausdruck verhält sich also so, wie Sie es erwarten, auch wenn der Befehl dies nicht tut.

Michael Hampton
quelle
Ich nehme an, Sie werden die Ablehnung erklären. Diese Antwort ist meines Wissens richtig.
Michael Hampton
1
Ich habe nicht abgelehnt, aber zur Verdeutlichung: Ich habe mich gefragt, ob Vim einen Operator hat, der dem ersten Nicht-Leerzeichen-Zeichen der Zeile entspricht. Der ^Operator (wie alle normalen Regex-Implementierungen) stimmt mit dem ersten Zeichen überein, auch wenn es sich um Leerzeichen handelt.
Michael
Nun, wie haben Sie damit gerechnet, es normal zu machen? Normalerweise würden Sie in einem regulären Ausdruck so etwas wie \Sdas erste Nicht-Leerzeichen-Zeichen verwenden.
Michael Hampton
2
\Spasst zu jedem Nicht-Leerzeichen. Um es anders auszudrücken, ich frage mich , wenn Vim eine Null-Breite Abkürzung für diese hat: ^\W*\S.
Michael
1
Kein mir bekannter Motor bietet diese Funktionalität, aber wann hätten Sie sich um einen Universalmotor gekümmert? Vim ist keine Universal-Regex-Engine. Es ist ein Editor, der eine Regex-Engine hat, also habe ich mich gefragt, ob es spezielle Konstrukte für etwas gibt, das nur in einem Editor von Bedeutung ist.
Michael