欢迎各位兄弟 发布技术文章
这里的技术是共享的
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编写脚本)具有优势...... :-)
[编辑]看起来我从这个线程或类似的地方得到了上面的宏... :-)我想第一行是不必要的(副作用或录音),但无论如何它们都是宏代码的好例子.
这篇[wiki](http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Editing_Configuration_Files#.3CMa...)文章列出了<Action />属性标志 (3认同)
@Pete,你的维基链接"死了".我发现[这篇wiki文章](http://npp-wiki.iwi.me/index.php/Editing_Configuration_Files#.3CMacros.3E); 可能是您找到的那个的重新定位版本. (2认同)
小智 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认同)
在 OP 发布 10 多年后发布,但我认为这仍然是一个相关问题(至少对我而言)。今天,Notepad++用户手册中有相当多的信息,与OP的问题有关:
关于所用语言的一般说明在配置文件文档中:https ://npp-user-manual.org/docs/config-files/#macros
此处更详细地介绍了搜索和替换操作(根据 OP 的要求):https ://npp-user-manual.org/docs/searching/#searching-actions-when-recorded-as-macros
下面是一段宏代码:用 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/