为Perl配置Notepad ++“函数列表”

时间:2015-03-24 22:21:48

标签: regex xml perl notepad++

我试图获得" Fucntion List" notepad ++(v 6.7.5)上的功能,用于Perl的类(或包,用perl的说法)。默认情况下,仅支持包外的常规子例程。

以下是功能列表配置文件中的XML代码段(位于我的Windows机器上的C:\ Users \ user \ AppData \ Roaming \ Notepad ++ \ functionList.xml)。我添加了" classRange"节点我自己在默认"功能"之上节点

编辑:由于用户stribizhev

,下面是更正后的XML

更新:我已经评论了"正常"函数部分,因为它导致我的所有方法在函数列表中出现两次。

<parser id="perl_function" displayName="Perl">
    <classRange mainExpr="^package.*?(?=\npackage|\Z)">
        <className>
            <nameExpr expr="\s\K[^;]+"/>
        </className>
        <function mainExpr="^[\s]*(?&lt;!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
            <functionName>
                <funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
            </functionName>
        </function>
    </classRange>
    <!--
    <function mainExpr="^[\s]*(?&lt;!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
        <functionName>
            <nameExpr expr="(sub[\s]+)?\K[\w]+"/>
        </functionName>
    </function>
    -->
</parser>

此文档为here

2 个答案:

答案 0 :(得分:3)

最有可能的,您应该使用funcNameExpr代替nameExpr

示例:

<functionName>
    <funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>

答案 1 :(得分:0)

funcNameExpr或取消注释对我不起作用。有效的方法-用括号注释掉三个正则表达式行:

#\(
#[^()]*
#\)

由于Perl在函数名称正确后不考虑括号,因此我没有这样的含义。括号可以位于函数的每个调用处,但不能位于函数所在的地方。