【发布时间】:2010-09-26 14:54:32
【问题描述】:
我想为 Notepad++ 编写一个宏,它应该分别用 char4、char5、char6 替换 char1、char2、char3。
【问题讨论】:
我想为 Notepad++ 编写一个宏,它应该分别用 char4、char5、char6 替换 char1、char2、char3。
【问题讨论】:
这篇文章可以帮助你一点点相关:
Using RegEX To Prefix And Append In Notepad++
假设字母数字词,您可以使用:
搜索 = ^([A-Za-z0-9]+)$ 替换 = 能够:“\1”
或者,如果您只想突出显示这些行并使用“全部替换”和“在选择中”(使用相同的替换):
搜索 = ^(.+)$
^ 指向行首。 $ 指向行尾。
\1 将是括号内的源匹配项。
【讨论】:
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 is selected),2327是Tab命令,Resource Hacker(随便拿吧……)说明42024 是“修剪尾随空格”菜单项,41006 是“保存”。
我猜动作类型 0 用于带有数字参数的 Scintilla 命令,类型 1 用于带有字符串参数的命令,2 用于 Notepad++ 命令。
问题:Scintilla 没有“全部替换”命令:客户端的任务是进行迭代,无论是否确认,等等。
另一个问题:似乎类型 1 操作仅限于 1 个字符(我手动编辑,退出 N++ 时它被截断)。
我尝试了一些技巧,但我担心这样的任务超出了宏的能力。
也许这就是具有 Lua 脚本能力的 SciTE(或似乎可以用 Python 编写脚本的程序员记事本)具有优势的地方...... :-)
[编辑] 看起来我从this thread 或类似的地方得到了上面的宏...... :-) 我猜第一行是不必要的(副作用或记录),但无论如何它们都是宏代码的好例子。
【讨论】:
实际上,shortcuts.xml 文件确实不存储用户生成的宏并且没有明显的候选包含此信息。这些说明已过时。
与各种网站的提示相反,v.5.4.2 未启用存储用户生成的宏。那个 XML 文件在那里,但是你的宏没有被存储进去。
我猜这是下一个版本会修复的错误。
【讨论】:
我不确定这是否有帮助,但我需要创建一个宏来保存一个 sn-p,所以我只是记录了自己插入项目并为其设置快捷方式。当然,我没有使用 5.9 版,所以可能会有一些细微的版本差异。要访问宏录制器,请转到宏 > 开始录制。然后您将执行您的操作,然后转到宏 > 停止录制。我建议播放它以确保它正确,然后保存并设置您的快捷键。
希望有所帮助。
【讨论】:
我刚刚在 v5.9.1 中这样做了。只需转到宏菜单,单击“开始录制”,执行 3 替换所有命令,然后停止录制。然后,您可以选择“保存当前录制的宏”,并按您喜欢的频率播放它,它会按照您的预期执行替换。
【讨论】:
我录制了一个宏,我在 %APPDATA%\Notepad++\shortcuts.xml 中找到了它。好像发在这个帖子的第一篇文章里。
我使用 NPP 版本。 5.9.6.2 与 Win7。
【讨论】:
我发现 Notepad++ 的 'Python Script' 插件更有用,因为使用该插件,我可以以 python 的形式编写简单的宏,并且它还有非常好的文档和用 python 编写的示例宏以及。如果您对 python 非常熟悉,那么我认为“Python 脚本”将提供正义。 更多信息请参考:http://npppythonscript.sourceforge.net/
【讨论】:
我的个人经验是,当 Notepad++ 退出时,shortcuts.xml 会被最初加载的 + 后来记录的宏和设置覆盖。所以你不能使用 Notepad++ 本身来编辑这个文件。
关闭Notepad++,用其他工具编辑shortcuts.xml,保存后重启Notepad++。
【讨论】:
在 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>
关于此代码的备注:
【讨论】: