Wie Vim foldexpr für xdebug Trace-Dateien mit memdeltas schreiben
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
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.