Я ничего не знаю о выражениях Vim. У меня есть vim foldexpr, который поставляется с файлом синтаксиса для файлов трассировки xdebug. Существующее выражение выглядит так:
foldexpr=strlen(substitute(substitute(substitute(substitute(getline(v:lnum),'^TR.*$','',''),'\\s>=>','->',\"g\"),'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$','\\1',''),'\\s\\s','\',\"g\"))-2
Это нормально работает для файлов трассировки по умолчанию, которые выглядят так:
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
и т.д.
Однако, если вы сконфигурируете Xdebug для показа дельт памяти в трассировке, файлы трассировки в итоге получатся такими (обратите внимание на дополнительный столбец с дельтами памяти, например, +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
Может кто-нибудь сказать мне, как изменить оригинальное выражение, чтобы сворачивание работало должным образом во втором примере? Я не могу сделать ни голову, ни хвост.
Спасибо