Как написать Vimfoldexpr для файлов трассировки xdebug с помощью memdeltas

StackOverflow https://stackoverflow.com/questions/514909

  •  21-08-2019
  •  | 
  •  

Вопрос

Я ничего не знаю о выражениях Vim.У меня есть vimfoldexpr, который поставляется с файлом синтаксиса для файлов трассировки 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 

Может ли кто-нибудь сказать мне, как изменить исходное выражение, чтобы во втором примере свертывание работало правильно?Я не могу понять ни головы, ни хвоста.

Спасибо

Это было полезно?

Решение

Часть, которая читает

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

ищет начало строки [^], затем 1 пробел [\\s], затем любой символ на 20 повторений [.\\{20\\}], затем, возможно, один или пробелы, запомненные на будущее [\\(\\s\\+\\)\\?], и, наконец, стрелка плюс что-нибудь еще до конца строки [->.*$].Если вы всегда собираетесь использовать дополнительный столбец, я бы просто изменил поиск по 20 символов на 30, например:

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

В противном случае вы можете попробовать диапазон, например:

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

На самом деле я не тестировал ни один из них, поэтому вам, возможно, придется немного подкорректировать цифры, но это должно помочь вам начать работу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top