bea*_*asy 5 regex xml perl notepad++
我正在努力获得notepad ++(v 6.7.5)上的"Fucntion List"功能,这个功能适用于带有类的Perl(或perl用语中的包).默认情况下,仅支持包外的常规子例程.
下面是功能列表配置文件中的XML代码段(位于我的Windows机器上的C:\ Users\user\AppData\Roaming\Notepad ++\functionList.xml).我自己在默认的"function"节点上添加了"classRange"节点.
编辑:由于用户stribizhev,下面是更正的XML
更新:我已经注释掉了"普通"功能部分,因为它导致我的所有方法在功能列表中出现两次.
<parser id="perl_function" displayName="Perl">
<classRange mainExpr="^package.*?(?=\npackage|\Z)">
<className>
<nameExpr expr="\s\K[^;]+"/>
</className>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</classRange>
<!--
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
<functionName>
<nameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
-->
</parser>
Run Code Online (Sandbox Code Playgroud)
这方面的文档就在这里.
小智 5
我在Notepad ++ 6.8.1中尝试了您的XML,尽管它确实适用于带有“程序包”的Perl,但是没有程序包的普通脚本现在无法生成子程序。我对您注释掉的行未加注释,它解决了该问题,但确实表现出您提到的行为-将“程序包”中的子程序加倍。
我发现以下方法很好地工作,甚至忽略了POD中的潜艇(可能在此处用作示例用法),因此没有将它们添加到列表中:
<parser id="perl_function" displayName="Perl" commentExpr="(#.*?$|(__END__.*\Z))">
<classRange mainExpr="(?<=^package).*?(?=\npackage|\Z)">
<className>
<nameExpr expr="\s\K[^;]+"/>
</className>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{">
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</classRange>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{">
<functionName>
<nameExpr expr="(?:sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</parser>
Run Code Online (Sandbox Code Playgroud)
最有可能的是,您应该使用funcNameExpr而不是nameExpr:
例子:
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
Run Code Online (Sandbox Code Playgroud)