37

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

4

9 回答 9

51

Notepad++ 中的宏只是一堆编码操作:您开始录制、操作缓冲区、可能激活菜单、停止录制然后播放宏。
经过调查,我发现它们保存在 Macros 部分的文件 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 的代码(即 insert string is nothing 被选中),2327 是 Tab 命令,Resource Hacker(随便用吧……)显示 42024 是“修剪尾随空格”菜单项和 41006 是“保存”。
我猜动作类型 0 用于带有数字参数的 Scintilla 命令,类型 1 用于带有字符串参数的命令,2 用于 Notepad++ 命令。

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

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

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

于 2008-12-12T14:15:37.657 回答
18

我发现 Notepad++ 的“ Python Script ”插件更有用,因为使用该插件,我可以以 python 的形式编写简单的宏,并且它也有非常好的文档和用 python 编写的示例宏。如果您对 python 很满意,那么我认为“Python 脚本”将提供正义。有关详细信息,请参阅: http: //npppythonscript.sourceforge.net/

于 2013-11-29T07:20:36.480 回答
7

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

我使用 NPP 版本。5.9.6.2 与 Win7。

于 2011-12-08T10:24:14.010 回答
4

在 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 中进行转义。而是通过录制宏来创建搜索和替换字符串。
于 2020-02-28T18:07:07.583 回答
2

这篇文章可以帮助你有点相关:

在 Notepad++ 中使用 RegEX 前缀和追加

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

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

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

搜索 = ^(.+)$

^ 指向行首。$ 指向行尾。

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

于 2008-12-12T11:18:58.427 回答
0

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

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

于 2014-12-30T08:23:47.383 回答
-1

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

希望有帮助。

于 2011-05-12T18:04:57.780 回答
-1

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

于 2011-08-03T12:13:41.393 回答
-2

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

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

估计是下个版本修复的bug。

于 2009-12-29T18:07:34.563 回答