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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top