2 Stimmen

VIM: Regex \zs \ze Problem

Ich versuche, den gesamten Text in den Zeilen ab dem 2. bis zum letzten Zeichen zu löschen. .word\ Muster (wobei auch der Punkt gelöscht wird), aber es gibt möglicherweise keine \ vor dem Punkt. Wenn es einen \ vor dem Punkt, dann löschen, bis der vorherige .word\ Muster.

Ich habe diese einfache Regex erstellt:
^\w\zs.*[^\]\.\ze\w\+\\\s.*$
aber das funktioniert nicht

Was habe ich falsch gemacht?

Wie würde der Code lauten, wenn ich bis zum letzten Tag nicht löschen möchte? .word\ aber bis zum 2. .word\ Muster?

Daten:
nnoremenu <silent> 97.330.10 &Sort.Reverse\ Characters.Reverse\ Characters\ in\ Line\ Hor\ -[A]<Tab>sihT\ si\ ym\ txet\.\ nnoremenu <silent> 97.330.11 &Sort.Reverse\ Characters.Reverse\ Characters\ in\ Line\ Hor\ Reverse\ -[A]<Tab>\.txet\ ym\ si\ sihT\

sein muss:
n Reverse\ Characters\ in\ Line\ Hor\ -[A]<Tab>sihT\ si\ ym\ txet\.\ n Reverse\ Characters\ in\ Line\ Hor\ Reverse\ -[A]<Tab>\.txet\ ym\ si\ sihT\

2voto

Benoit Punkte 72929

Sie sollten verwenden:

:%s/^\w\zs.*\\\@<!\.\ze\w\+\\\s

Beachten Sie, dass die letzte \s bedeutet, dass Sie ein Leerzeichen nach dem letzten Backslash benötigen.

Les \@<! Hilfsmittel: lookbehind negative Assertion (siehe :help /\@<! ).

Beachten Sie auch, dass die letzte .*$ ist nutzlos.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X