Frage

Ich weiß nichts über Vim Ausdrücke. Ich habe einen vim foldexpr, die für xdebug Trace-Dateien mit einer Syntaxdatei kommt. Die bestehende Ausdruck sieht wie folgt aus:

foldexpr=strlen(substitute(substitute(substitute(substitute(getline(v:lnum),'^TR.*$','',''),'\\s>=>','->',\"g\"),'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$','\\1',''),'\\s\\s','\',\"g\"))-2

Das ist für Standard-Trace-Dateien OK arbeitet, die wie folgt aussehen:

0.0974    3908596     -> GenericDispatcher->dispatch() /home/tomw/source/public_html/main.php:49
0.0975    3908676       -> ReflectionClass->getMethods() /home/tomw/source/presentation/framework/routing/GenericDispatcher.php:59
0.0975    3910532       -> ReflectionFunctionAbstract->getName() /home/tomw/source/presentation/framework/routing/GenericDispatcher.php:60

etc.

Wenn Sie jedoch Xdebug konfigurieren mem Deltas in der Spur zu zeigen, am Ende die Trace-Dateien wie folgt auf (beachten Sie die zusätzliche Spalte mit Speicher Deltas, zB +80.):

0.0964    3908336      +84     -> GenericDispatcher->dispatch() /home/tomw/source/public_html/main.php:49
0.0965    3908416      +80       -> ReflectionClass->getMethods() /home/tomw/source/presentation/framework/routing/GenericDispatcher.php:59
0.0965    3910272    +1856       -> ReflectionFunctionAbstract->getName() /home/tomw/source/presentation/framework/routing/GenericDispatcher.php:60 

Kann mir jemand sagen, wie der ursprünglichen Ausdruck zu ändern, so dass Falten richtig im zweiten Beispiel funktioniert? Ich kann es nicht machen Kopf noch Schwanz davon.

Danke

War es hilfreich?

Lösung

Der Teil, liest

'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$'

wird die Suche nach dem Anfang einer Zeile [^], dann 1 Raum [\\s], dann ein beliebiges Zeichen für 20 Wiederholungen [.\\{20\\}], dann gegebenenfalls ein oder später erinnerte Räume für [\\(\\s\\+\\)\\?], und schließlich ein Pfeil und alles sonst bis zum Ende der Zeile [->.*$]. Wenn Sie immer mit der zusätzlichen Spalte zu gehen, würde ich nur die 20 Zeichensuche zu 30 ändern, etwa so:

'^\\s.\\{30\\}\\(\\s\\+\\)\\?->.*$'

Ansonsten könnten Sie eine Reihe versuchen, wie folgt aus:

'^\\s.\\{20,30\\}\\(\\s\\+\\)\\?->.*$'

Ich habe nicht wirklich eine dieser getestet, so dass Sie die Zahlen ein wenig zu zwicken haben könnten, aber das sollte man in Richtung hat es erhalten begonnen arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top