Я ничего не знаю о выражениях 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
Может ли кто-нибудь сказать мне, как изменить исходное выражение, чтобы сворачивание работало правильно во втором примере? Я не могу понять ни головы, ни хвоста.
Спасибо