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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top