如何为Notepad++编写宏?

39

我想写一个Notepad++宏,它应该将char1、char2和char3分别替换为char4、char5和char6。

9个回答

53

Notepad++中的宏只是一组编码操作:您开始录制,对缓冲区进行操作,可能会激活菜单,停止录制,然后播放宏。
经过调查,我发现它们保存在快捷方式.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 进行脚本化的 Programmer's Notepad)有优势的地方…… :-)

[编辑] 看起来我从此线程或类似位置获取了上述宏…… :-) 我猜第一行是不必要的(副作用或录制),但它们仍然是好的宏代码示例。


3
这篇维基文章详细介绍了<Action />属性标记的使用方法。 - Pete
顺便提一下,它确实记录对话框操作。我在一个文档中使用宏进行了多次查找/替换,效果非常完美。不过每次查找后都需要点击“确定”按钮。 - Derek
1
当您没有关联键盘快捷方式时,似乎它没有保存在此文件中。 - Bojan Bjelic
3
@Pete,你的维基链接“失效”了。我找到了这篇维基文章,可能是你找到的那篇文章的迁移版本。 - Superole
1
这不仅限于SciTE。Notepad++ 也有Python脚本功能:http://npppythonscript.sourceforge.net/ - Jerry Jeremiah
维基页面的重定向版本不再可用,但如果您正在寻找可用的“wparams”列表(例如,宏执行的操作),则可以像在此答案中提到的那样使用Resource Hacker,或者查看Github上的语言文件以获取完整的wparam兼容ID列表。请访问:https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/installer/nativeLang/english.xml#L69 - Mischa Rodermond

19

我发现使用Notepad++中的'Python脚本'插件更为实用,因为通过该插件,我可以以Python语言编写简单的宏,并且该插件具有非常好的文档和示例宏供参考。如果您对Python语言很熟悉,那么我认为'Python脚本'插件将会很有用。

欲了解更多信息,请参考:http://npppythonscript.sourceforge.net/


我发现我必须安装Python Script 1.0.8.0,因为插件管理器安装的版本有缺陷。 - slonik
是的,但是不可能像在MS Word或Excel中保存VBA一样“记录”用户执行的操作并将它们保存为宏。这真是遗憾,因为Python脚本比记事本加宏代码更强大,后者在阅读、纠正和自定义宏时缺乏一些“弹性”和清晰度。因此,Python脚本插件不能像宏那样工作。 - willy wonka

7

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

我使用的是NPP Ver.5.9.6.2和Win7。


3
直到关闭Notepad++,该文件才会被保存。 - northben

5

虽然距离OP发布已经超过10年,但我认为这仍然是个相关的问题(至少对我来说是)。如今,在Notepad++用户手册中有相当多的信息与OP提出的问题有关:

以下是一个宏代码块:使用正则表达式将SEARCHTEXT替换为REPLACETEXT,“.”可以查找/r和/n,在路径PATH的每个符合GLOBFILEFILTER过滤器的文件中执行替换(不包括子文件夹,我不确定此标记在哪里定义/设置)。

<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中,像<, >, &这样的字符需要进行转义。最好通过录制宏来创建查找和替换字符串。

2
这篇文章可能对您有所帮助:

在Notepad++中使用正则表达式添加前缀和后缀

假设是字母数字组成的单词,您可以使用以下代码:

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

或者,如果您只想突出显示行并使用“全部替换”和“选择内”的相同替换:

搜索 = ^(.+)$

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

\1将是括号内源匹配。


0

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

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


-1

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

希望这有所帮助。


-1
我刚在v5.9.1中完成了这个操作。只需转到宏菜单,点击“开始录制”,执行您的3个替换所有命令,然后停止录制。然后,您可以选择“保存当前记录的宏”,并随时播放它,它将按您的期望执行替换。

-2

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

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

我猜这是一个 bug,将在下一个版本中得到修复。


1
如果这个功能没有工作,怎么办!(希望现在已经修复了。) - svend
4
请查看 %userprofile%\Application Data\Notepad++\shortcuts.xml 文件。 - Pete
2
它们存储在5.9.8版本中的%userprofile%\Application Data\Notepad++\shortcuts.xml文件中。 - Steve Rowe
我不太同意 - 在5.9(Win7)中,用户宏确实存储在shortcuts.xml中。注意:只有在退出NPP后才会将它们写入那里。 - Marc
在v6.6.7中,您可以选择将设置同步到云端,在这种情况下,您会在...\Dropbox\Notepad++\shortcuts.xml中找到它们。 - harvest316

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接