如何为Notepad ++编写宏?

时间:2008-12-12 10:43:29

标签: macros notepad++

我想为Notepad ++编写一个宏,它应该分别用char4,char5,char6替换char1,char2,char3。 感谢

9 个答案:

答案 0 :(得分:49)

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是“Trim Trailing Space”菜单项,41006是“Save” 我猜动作类型0用于带数字参数的Scintilla命令,类型1用于带字符串参数的命令,2用于Notepad ++命令。

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

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

[编辑]看起来我从this thread或类似的地方得到了上面的宏...... :-)我想第一行是不必要的(副作用或录音)但它们是宏代码的好例子反正。

答案 1 :(得分:14)

我找到了&#39; Python脚本&#39; Notepad ++的插件更有用,因为使用插件,我可以用python的形式编写简单的宏,并且它也有非常好的文档和用python编写的示例宏。如果您对python非常熟悉,那么我认为Python脚本&#39;将提供正义。 有关更多信息,请参阅:http://npppythonscript.sourceforge.net/

答案 2 :(得分:7)

我录制了一个宏,我在%APPDATA%\ Notepad ++ \ shortcuts.xml中找到了它。它似乎发布在此主题的第一篇文章中。

我使用NPP Ver。 5.9.6.2使用Win7。

答案 3 :(得分:2)

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

这是一个宏代码块:使用正则表达式“。”将SEARCHTEXT替换为REPLACETEXT。在与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中转义。而是通过录制宏来创建搜索并替换字符串。

答案 4 :(得分:1)

这篇文章可以帮助你解决一些问题:

Using RegEX To Prefix And Append In Notepad++

假设字母数字,您可以使用:

搜索= ^([A-Za-z0-9] +)$ 替换=能:“\ 1”

或者,如果您只想突出显示这些线条并使用“全部替换”和“在选择中”(具有相同的替换):

搜索= ^(。+)$

^指向该行的开头。 $指向行尾。

\ 1将是括号内的源匹配。

答案 5 :(得分:0)

我个人的经验是,当Notepad ++退出时,shortcuts.xml会被初始加载的+以后录制的宏和设置覆盖。因此,您无法使用Notepad ++本身来​​编辑此文件。

关闭Notepad ++,使用其他工具编辑shortcuts.xml,保存并重新启动Notepad ++。

答案 6 :(得分:-1)

我不确定这是否有帮助,但我需要创建一个宏来保存一个片段,所以我只是记录自己插入项目并设置它的快捷方式。当然,我没有使用版本5.9所以可能会有一些轻微的版本差异。要访问宏录制器,请转到宏&gt;开始录制。然后,您将执行操作,然后转到宏&gt;停止录制。我建议回放它以确保它是正确的,然后保存并设置快捷键。

希望有所帮助。

答案 7 :(得分:-1)

我刚刚在v5.9.1中做到了这一点。只需转到宏菜单,单击“开始录制”,执行3替换所有命令,然后停止录制。然后,您可以选择“保存当前录制的宏”,并根据需要随时播放,它将按预期执行替换。

答案 8 :(得分:-2)

实际上,shortcuts.xml文件存储用户生成的宏,并且没有明显的候选者包含此信息。这些说明已过期。

与各种网站的提示相反,v.5.4.2未启用存储用户生成的宏。该XML文件存在,但您的宏不会存储在其中。

我猜这是一个将被下一个版本修复的错误。