Comment écrire pour Vim foldexpr fichiers de trace xdebug avec memdeltas
Question
Je ne sais rien sur les expressions Vim. J'ai un foldexpr vim qui vient avec un fichier de syntaxe pour les fichiers de trace xdebug. L'expression actuelle ressemble à ceci:
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 de telle sorte que le pliage fonctionne correctement dans le second exemple? Je ne peux ni queue ni tête de celui-ci.
Merci
La solution
La partie qui lit
'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$'
est la recherche du début d'une ligne [^
], puis une espace [\\s
], puis un caractère de 20 répétitions [.\\{20\\}
], puis éventuellement un ou des espaces mémoires pour plus tard [\\(\\s\\+\\)\\?
], et enfin une flèche, plus rien d'autre à 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 suit:
'^\\s.\\{30\\}\\(\\s\\+\\)\\?->.*$'
Dans le cas contraire, vous pouvez essayer une gamme, comme ceci:
'^\\s.\\{20,30\\}\\(\\s\\+\\)\\?->.*$'
Je ne l'ai pas fait testé aucun de ceux-ci, de sorte que vous pourriez avoir à modifier les chiffres un peu, mais cela devrait vous aider à démarrer à avoir fonctionner.