欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

如何为Notepad ++编写宏? 有大用

Notepad ++中的宏只是一堆编码操作:您开始录制,在缓冲区上操作,可能激活菜单,停止录制然后播放宏.
经过调查,我发现它们保存在宏部分的文件shortcuts.xml中.例如,我在那里:

<Macro name="Trim Trailing and save" Ctrl="no" Alt="yes" Shift="yes" Key="83">
    <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
    <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
    <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " />
    <Action type="0" message="2327" wParam="0" lParam="0" sParam="" />
    <Action type="0" message="2327" wParam="0" lParam="0" sParam="" />
    <Action type="2" message="0" wParam="42024" lParam="0" sParam="" />
    <Action type="2" message="0" wParam="41006" lParam="0" sParam="" />
</Macro>

我没有查看源代码,但从外观上看,我会说我们将消息发送到Scintilla(编辑组件,可能是0和1类型),以及Notepad ++本身(可能是激活菜单项).
我不认为它会记录对话框中的动作(如搜索/替换).

看看Scintilla.iface文件,我们可以看到2170是ReplaceSel的代码(即插入字符串没有被选中),2327是Tab命令,而Resource Hacker(只是让它得心应用......)显示42024是"修剪尾随空间"菜单项和41006是"保存".
我想动作类型0用于具有数字参数的Scintilla命令,类型1用于具有字符串参数的命令,2用于Notepad ++命令.

问题:Scintilla没有"全部替换"命令:客户端的任务是进行迭代,有或没有确认等.
另一个问题:似乎类型1动作仅限于1个字符(我手动编辑) ,当退出N ++时,它被截断).
我尝试了一些技巧,但我担心这样的任务超出了宏观能力.

也许这就是SciTE凭借其Lua脚本编写能力(或程序员的记事本似乎可以用Python编写脚本)具有优势...... :-)

[编辑]看起来我从这个线程或类似的地方得到了上面的宏... :-)我想第一行是不必要的(副作用或录音),但无论如何它们都是宏代码的好例子.



小智  15


我发现Notepad ++的' Python Script '插件更有用,因为使用插件,我可以用python的形式编写简单的宏,并且它也有非常好的文档和用python编写的示例宏.如果你对python非常熟悉,那么我认为'Python Script'将提供正义.有关更多信息,请参阅:http://npppythonscript.sourceforge.net/



    小智  7


    我录制了一个宏,我在%APPDATA%\ Notepad ++\shortcuts.xml中找到了它.它看起来像发布在这个帖子的第一篇文章中.

    我用NPP Ver.5.9.6.2使用Win7.


    • 在Notepad ++关闭之前,不会保存此文件. (3认同)


    Nøk*_*Nøk  5


    在 OP 发布 10 多年后发布,但我认为这仍然是一个相关问题(至少对我而言)。今天,Notepad++用户手册中有相当多的信息,与OP的问题有关:

    下面是一段宏代码:用 REPLACETEXT 替换 SEARCHTEXT,使用正则表达式“.”。在文件夹 PATH 中与过滤器 GLOBFILEFILTER 匹配的每个文件中找到 /r 和 /n(没有子文件夹,不确定在哪里定义/设置了此标志)。

    <Macro name="REPLACE_IN_FILES_REGEX_DOT_FINDS_CR_AND_LF" Ctrl="no" Alt="no" Shift="no" Key="0">
        <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
        <Action type="3" message="1601" wParam="0" lParam="0" sParam="SEARCHTEXT" />
        <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
        <Action type="3" message="1602" wParam="0" lParam="0" sParam="REPLACETEXT" />
        <Action type="3" message="1653" wParam="0" lParam="0" sParam="PATH" />
        <Action type="3" message="1652" wParam="0" lParam="0" sParam="GLOBFILEFILTER" />
        <Action type="3" message="1702" wParam="0" lParam="1024" sParam="" /> 
            <!-- #COMMENT: "1024" seems to be the flag ". finds /n and /r". This is not in the documentation. -->
        <Action type="3" message="1701" wParam="0" lParam="1660" sParam="" />
    </Macro>
    

    关于此代码的备注:

    • 文件夹的路径需要以反斜杠结尾。

    • <、>、& 等字符需要在 xml 中进行转义。而是通过录制宏来创建搜索和替换字符串。





      来自  https://qa.1r1g.com/sf/ask/25371111/


      普通分类: