2009-02-05 7 views
2

Je ne connais rien aux expressions Vim. J'ai un vim foldexpr qui vient avec un fichier de syntaxe pour les fichiers de trace xdebug. L'expression actuelle ressemble à ceci:Comment écrire Vim foldexpr pour les fichiers de trace xdebug avec memdeltas

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

Cela fonctionne bien pour les fichiers de trace par défaut, qui ressemblent à ceci:

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.

Cependant, si vous configurez Xdebug pour montrer deltas mem dans la trace, les fichiers de trace finissent comme ceci (notez la colonne supplémentaire avec deltas de mémoire, par exemple +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 

Quelqu'un peut-il me dire comment modifier l'expression originale afin que le pliage fonctionne correctement dans le second exemple? Je ne peux pas en faire la tête ni la queue.

Merci

Répondre

2

La partie qui lit

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

est à la recherche pour le début d'une ligne [^], puis 1 espace [\\s], alors un caractère de 20 répétitions [.\\{20\\}], puis éventuellement un ou des espaces rappelés pour plus tard [\\(\\s\\+\\)\\?], et enfin une flèche plus toute autre chose à la fin de la ligne [->.*$]. Si vous êtes toujours allez utiliser la colonne supplémentaire, je voudrais juste changer la recherche de 20 caractères à 30, comme ceci:

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

Sinon, vous pouvez essayer une gamme, comme ceci:

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

Je n'ai testé aucun de ces éléments, donc vous devrez peut-être modifier un peu les chiffres, mais cela devrait vous aider à le faire fonctionner.

+0

Super, ça fait l'affaire. À votre santé! – EvilPuppetMaster

Questions connexes