8

Notepad++ 提供了一个函数列表。

我目前正在使用记事本++ 6.5

functionList.xml 使用正则表达式定义函数名称的解析器。

以下代码定义了 c 函数的解析器

<parser id="c_function" displayName="C source" commentExpr="((/\*.*?\*)/|(//.*?$))">
    <function
        mainExpr="^[\t ]*((static|const|virtual)[\s]+)?[\w:]+([\s]+[\w]+)?([\s]+|\*[\s]+|[\s]+\*|[\s]+\*[\s]+)([\w_]+[\s]*::)?(?!(if|while|for))[\w_]+[\s]*\([^\)\(]*\)([\s]*const[\s]*)?[\n\s]*\{"
        displayMode="$functionName">
            <functionName>
                <nameExpr expr="(?!(if|while|for))[\w_~]+[\s]*\("/>
                <nameExpr expr="(?!(if|while|for))[\w_~]+"/>
                </functionName>         </function>
</parser>

我在线尝试了我的正则表达式,一切都很好。但它不适用于 functionList.xml 不知何故。函数列表保持为空。

这对于 Lua 函数来说会是什么样子?

这是我的尝试:

<parser id="lua_function" displayName="Lua Function" commentExpr="((--\[\[\*.*?\*)/|(--.*[\n\s\w\t]*\]\]))">
            <function
                mainExpr="^[\t\s]*(function)[\s]+[\w]+\("
                displayMode="$functionName">
                <functionName>
                    <nameExpr expr="(?:(function[\s]+))[\w]+"/>
                </functionName>
            </function>
        </parser>
4

4 回答 4

5

我对 Notepad++ 使用我自己的定义。它的主要区别是支持类似的功能:local SomeFunction = function() endfunction SomeObject:Func() end. 它还具有一些基本的 lua 表视图兼容性。

<!-- Basic lua parser for functionList.xml in Notepad++ 6.5.3 -->
<!-- See http://notepad-plus-plus.org/features/function-list.html -->
<parser id="lua_function" displayName="Lua" commentExpr="--.*?$">
    <!-- Basic lua table view, nested lua table not supported -->
    <classRange
        mainExpr="[.\w]+[\s]*=[\s]*\{"
        openSymbole="\{"
        closeSymbole="\}"
        displayMode="node">
        <className>
            <nameExpr expr="[.\w]+"/>
        </className>
        <function
            mainExpr="[.\w]+[\s]*=[\s]*['&quot;]?[\w]+['&quot;]?">
            <functionName>
                <funcNameExpr expr=".*"/>
            </functionName>
        </function>
    </classRange>
    <!-- Basic lua functions support -->
    <function 
        mainExpr="(function[\s]+[.\w]+(:[\w]+)?)|([.\w]+[\s]*=[\s]*function)"
        displayMode="$className->$functionName">
        <functionName>
            <nameExpr expr="((?<=function)[\s]+[.:\w]+)|(([.\w]+)(?=([\s]*=[\s]*function)))"/>
        </functionName>
        <className>
            <nameExpr expr="[.\w]+(?=:)"/>
        </className>
    </function>
</parser>

还添加关联

<association id="lua_function" langID="23" />
于 2014-01-31T12:46:37.543 回答
2

我在 lua 和函数列表中经历过的两件事是,我首先必须在 %appdata%\Notepad++ 中使用 functionList.xml 才能使其工作,但这可能是我的安装,其次是你的配置中缺少两件事。首先关联 langID = "23"

<associationMap>
  <association langID = "23" id="lua_function"/>
</associationMap>

第二个是正则表达式会错过本地函数,我目前看起来像这样

        <parser id="lua_function" displayName="Lua">
            <function mainExpr="^[\t|local\s]*function\s+[^0-9][_A-Za-z0-9]+\s*\("
                      displayMode="$functionName">
              <functionName>
                <nameExpr expr="[^0-9][_A-Za-z0-9]+\s*\("/>
                <nameExpr expr="[^0-9][_A-Za-z0-9]+"/>
              </functionName>
            </function>
         </parser>

将两者都添加到 functionList.xml(取决于安装、程序文件或 %appdata%)将使功能列表适用于 Notepad++ 6.5.1 中的 lua 语言

于 2013-11-21T17:52:50.637 回答
1

我得到了以下工作。这很简单,我没有打扰该commentExpr属性(因为它是可选的;请参阅文档):

<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
  <functionList>
    <associationMap>
      <association langID = "23" id="lua_function"/>
    </associationMap>
    <parsers>
      <parser id="lua_function" displayName="Lua">
        <function mainExpr="^[\t\s]*function\s+[^0-9][_A-Za-z0-9]+\s*\("
                  displayMode="$functionName">
          <functionName>
            <nameExpr expr="[^0-9][_A-Za-z0-9]+\s*\("/>
            <nameExpr expr="[^0-9][_A-Za-z0-9]+"/>
          </functionName>
        </function>
      </parser>
    </parsers>
  </functionList>
</NotepadPlus>

您是否确保将解析器添加到associationMap标签中?

需要多个nameExpr标签才能将匹配的字符串过滤为仅函数名称。

于 2013-10-12T20:27:39.823 回答
-1

来自FunctionList 插件 2.1的片段:

<Language name="Lua" imagelistpath="">
    <CommList param1='&quot;' param2='&quot;' />
    <CommList param1="&apos;" param2="&apos;" />
    <CommList param1="--" param2="" />
    <CommList param1="--\[\[" param2="\]\]" />
    <Group name="FUNCTION" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="\&lt;do\&gt;|\&lt;if\&gt;|\&lt;function\&gt;" keywords="">
        <Rules regexbeg="^[-\s]*function\s+" regexfunc="[\w_:.]+" regexend="\s*\([\w_,.\s]*\)" bodybegin="" bodyend="\&lt;end\&gt;" sep="" />
        <Rules regexbeg="^[-\s]*" regexfunc="[\w_:.]+" regexend="\s*=\s*function\s*\([\w_,\s]*\)" bodybegin="" bodyend="\&lt;end\&gt;" sep="" />
        <Rules regexbeg="^" regexfunc="[\w_]+" regexend="\s*=" bodybegin="\{" bodyend="\}" sep="" />
    </Group>
</Language>

我想,您可以获取该插件的最新版本,而不必再担心... :)

于 2013-10-08T12:29:59.930 回答