【问题标题】:How to write macro for Notepad++?如何为 Notepad++ 编写宏?
【发布时间】:2010-09-26 14:54:32
【问题描述】:

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

【问题讨论】:

    标签: macros notepad++


    【解决方案1】:

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

    Using RegEX To Prefix And Append In Notepad++

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

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

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

    搜索 = ^(.+)$

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

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

    【讨论】:

      【解决方案2】:

      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 或类似的地方得到了上面的宏...... :-) 我猜第一行是不必要的(副作用或记录),但无论如何它们都是宏代码的好例子。

      【讨论】:

      • 这篇wiki 文章对 属性标志进行了细分
      • 顺便说一句,它确实记录了对话动作。我使用宏在文档中多次查找/替换,并且效果很好。不过,它要求您在每次找到后单击“确定”。
      • 当您没有关联的键盘快捷键时,它似乎没有保存在此文件中...
      • @Pete,您的 wiki 链接已“失效”。我找到了this wiki article;可能是您找到的版本的重新定位版本。
      • 这不仅仅是 SciTE。 Notepad++ 也有 Python 脚本:npppythonscript.sourceforge.net
      【解决方案3】:

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

      与各种网站的提示相反,v.5.4.2 未启用存储用户生成的宏。那个 XML 文件在那里,但是你的宏没有被存储进去。

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

      【讨论】:

      • 如果该功能不起作用怎么办! (希望现在已经修复。)
      • 查看 %userprofile%\Application Data\Notepad++\shortcuts.xml
      • 它们存储在 5.9.8 中的 %userprofile%\Application Data\Notepad++\shortcuts.xml 中。
      • 我不同意 - 在 5.9 (Win7) 中,用户宏确实存储在 shortcuts.xml 注意:它们只有在退出 NPP 后才会写入那里。
      • 在 v6.6.7 中,您可以选择将设置同步到云端,在这种情况下,您可以在 ...\Dropbox\Notepad++\shortcuts.xml 中找到它们
      【解决方案4】:

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

      希望有所帮助。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          我录制了一个宏,我在 %APPDATA%\Notepad++\shortcuts.xml 中找到了它。好像发在这个帖子的第一篇文章里。

          我使用 NPP 版本。 5.9.6.2 与 Win7。

          【讨论】:

          • 在 Notepad++ 关闭之前不会保存此文件。
          【解决方案7】:

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

          【讨论】:

          • 我发现我必须安装 Python Script 1.0.8.0,因为插件管理器安装的那个有问题
          • 是的,但不可能“记录”用户所做的操作并将它们保存为宏,例如保存在 vba 中的 ms word 或 excel。这是一个真正的耻辱,因为 python 脚本比记事本更强大,加上宏代码在读取、更正和自定义宏时缺乏一些“弹性”和清晰性。所以 python 脚本插件不能像宏那样工作。
          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            在 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 中转义。而是通过录制宏来创建搜索和替换字符串。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-08-08
              • 1970-01-01
              • 2012-04-22
              • 2020-05-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多