Come scrivere Vim foldexpr per i file xdebug traccia con memdeltas
Domanda
Non so niente di espressioni Vim. Ho un foldexpr vim che viene fornito con un file di sintassi per i file xdebug traccia. L'espressione attuale assomiglia a questo:
foldexpr=strlen(substitute(substitute(substitute(substitute(getline(v:lnum),'^TR.*$','',''),'\\s>=>','->',\"g\"),'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$','\\1',''),'\\s\\s','\',\"g\"))-2
Questo funziona bene per i file di traccia di default, che assomigliano a questo:
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
ecc.
Tuttavia, se si configura Xdebug mostrare delta mem nella traccia, i file di traccia finiscono come questo (notare la colonna in più con il delta di memoria, ad esempio, +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
Qualcuno può dirmi come modificare l'espressione originale in modo che funzioni correttamente pieghevole nel secondo esempio? Non posso fare capo né coda di esso.
Grazie
Soluzione
La parte che legge
'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$'
è una ricerca per l'inizio di una riga [^
], quindi 1 spazio [\\s
], quindi qualsiasi carattere per 20 ripetizioni [.\\{20\\}
], quindi opzionalmente uno o spazi ricordati per più tardi [\\(\\s\\+\\)\\?
], e, infine, una freccia, più ogni altra cosa alla fine della linea [->.*$
]. Se si sta andando sempre di utilizzare la colonna in più, vorrei solo cambiare la ricerca di 20 caratteri a 30, in questo modo:
'^\\s.\\{30\\}\\(\\s\\+\\)\\?->.*$'
In caso contrario, si potrebbe provare un intervallo, in questo modo:
'^\\s.\\{20,30\\}\\(\\s\\+\\)\\?->.*$'
Non ho effettivamente testato uno di questi, per cui potrebbe essere necessario modificare i numeri un po ', ma questo dovrebbe iniziare verso avere il lavoro.