如何使用memdeltas为xdebug跟踪文件编写Vim foldexpr

时间:2009-02-05 07:25:42

标签: vim trace xdebug folding

我对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配置为在跟踪中显示mem deltas,则跟踪文件最终会像这样(注意带有内存增量的额外列,例如。+ 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 

有谁能告诉我如何修改原始表达式,以便折叠在第二个例子中正常工作?我无法做出头脑或尾巴。

由于

1 个答案:

答案 0 :(得分:2)

读取的部分

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

正在搜索行[^]的开头,然后是1个空格[\\s],然后是20个重复[.\\{20\\}]的任意字符,然后可选择记住一个或多个空格对于以后的[\\(\\s\\+\\)\\?],最后是箭头加上任何其他内容到行[->.*$]的末尾。如果你总是要使用额外的列,我只需将20个字符的搜索更改为30,如下所示:

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

否则,您可以尝试范围,如下所示:

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

我实际上没有测试过这些,所以你可能需要稍微调整一下这些数字,但是这应该让你开始使用它。