我对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
有谁能告诉我如何修改原始表达式,以便折叠在第二个例子中正常工作?我无法做出头脑或尾巴。
由于
答案 0 :(得分:2)
读取的部分
'^\\s.\\{20\\}\\(\\s\\+\\)\\?->.*$'
正在搜索行[^
]的开头,然后是1个空格[\\s
],然后是20个重复[.\\{20\\}
]的任意字符,然后可选择记住一个或多个空格对于以后的[\\(\\s\\+\\)\\?
],最后是箭头加上任何其他内容到行[->.*$
]的末尾。如果你总是要使用额外的列,我只需将20个字符的搜索更改为30,如下所示:
'^\\s.\\{30\\}\\(\\s\\+\\)\\?->.*$'
否则,您可以尝试范围,如下所示:
'^\\s.\\{20,30\\}\\(\\s\\+\\)\\?->.*$'
我实际上没有测试过这些,所以你可能需要稍微调整一下这些数字,但是这应该让你开始使用它。