Как написать макрос для Notepad ++?

Я хотел бы написать макрос для Notepad ++, который должен заменить char1, char2, char3 на char4, char5, char6 соответственно.

12.12.2008 10:43:28
9 ОТВЕТОВ
РЕШЕНИЕ

Макросы в 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 " Элемент меню Trim Trailing Space », а 41006 -« Сохранить ».
Я предполагаю, что тип действия 0 предназначен для команд Scintilla с числовыми параметрами, тип 1 - для команд со строковым параметром, 2 - для команд Notepad ++.

Проблема: в Scintilla нет команды «Заменить все»: задача клиента - выполнить итерацию с подтверждением или без него и т. Д.
Другая проблема: кажется, что действие типа 1 ограничено 1 символом (я редактировал вручную , при выходе из N ++ он был обрезан).
Я попробовал несколько трюков, но боюсь, что эта задача выходит за рамки возможностей макроса.

Может быть, именно здесь SciTE с его способностью написания сценариев Lua (или блокнотом для программиста, который, кажется, может быть написан с помощью Python) ... :-)

[РЕДАКТИРОВАТЬ] Похоже, я получил вышеупомянутый макрос из этого потока или аналогичного места ... :-) Я думаю, первые строки не нужны (побочный эффект или запись), но они все равно были хорошими примерами макрокода.

50
30.04.2018 10:19:03
В этой статье на вики есть разбивка флагов атрибутов <Action />
Pete 2.06.2011 17:15:11
Кстати, он делает запись действий диалога. Я использовал макрос, чтобы найти / заменить несколько раз в документе, и он работал отлично. Это требует, чтобы вы нажимали OK после каждой находки.
Derek 7.03.2012 20:46:22
кажется, что он не сохранен в этом файле, если у вас нет ассоциированного сочетания клавиш ...
Bojan Bjelic 1.10.2013 07:01:23
@ Пит, твоя вики-ссылка "мертва". Я нашел эту статью вики ; возможно перемещенная версия той, которую вы нашли.
Superole 27.01.2015 14:55:06
Это не просто SciTE. В Notepad ++ также есть скрипты на Python: npppythonscript.sourceforge.net
Jerry Jeremiah 18.05.2016 00:12:10

Этот пост может помочь вам как-то связанный:

Использование RegEX для префикса и добавления в Notepad ++

Предполагая буквенно-цифровые слова, вы можете использовать:

Поиск = ^ ([A-Za-z0-9] +) $ Заменить = в состоянии: "\ 1"

Или, если вы просто хотите выделить строки и использовать «Заменить все» и «В выделении» (с такой же заменой):

Поиск = ^ (. +) $

^ указывает на начало строки. $ указывает на конец строки.

\ 1 будет исходным совпадением в скобках.

1
23.05.2017 12:09:57

На самом деле, файл shortcuts.xml не хранит созданные пользователем макросы, и ни один из очевидных кандидатов не содержит эту информацию. Эти инструкции устарели.

Вопреки советам различных сайтов, сохранение пользовательских макросов не включено для v.5.4.2. Этот XML-файл есть, но ваш макрос не сохраняется в нем.

Я предполагаю, что это ошибка, которая будет исправлена ​​в следующей версии.

-2
11.02.2010 17:47:00
Как так, если функция не работает! (Надеюсь, это сейчас исправлено.)
svend 11.02.2010 17:51:27
посмотрите в% userprofile% \ Application Data \ Notepad ++ \ shortcuts.xml
Pete 2.06.2011 17:16:41
Они хранятся в% userprofile% \ Application Data \ Notepad ++ \ shortcuts.xml в 5.9.8.
Steve Rowe 20.03.2012 04:52:28
Я позволю себе не согласиться - пользовательские макросы 5.9 (Win7) действительно хранятся в shortcuts.xml. Примечание: они записываются туда только после выхода из NPP.
Marc 12.11.2012 19:41:44
В v6.6.7 у вас есть возможность синхронизировать свои настройки в облаке, и в этом случае вы сможете найти их в ... \ Dropbox \ Notepad ++ \ shortcuts.xml
harvest316 1.08.2014 11:46:23

Я не уверен, поможет ли это, но мне нужно было создать макрос для фрагмента, поэтому я просто записал, как вставляю элементы, и назначаю ему ярлык. Конечно, я не использую версию 5.9, поэтому могут быть небольшие отличия версии. Для доступа к устройству записи макросов перейдите в «Макрос»> «Начать запись». Затем вы выполните свое действие и перейдите в «Макрос»> «Остановить запись». Я бы порекомендовал воспроизвести его, чтобы убедиться в его правильности, а затем сохранить и установить клавишу быстрого доступа.

Надеюсь, что помогает.

-1
12.05.2011 18:04:57

Я только что сделал это в v5.9.1. Просто зайдите в Macro Menu, нажмите «Начать запись», выполните 3 замены всех команд, затем остановите запись. Затем вы можете выбрать «Сохранить текущий записанный макрос» и воспроизводить его так часто, как вам нравится, и он выполнит замену, как вы ожидаете.

-1
3.08.2011 12:13:41

Я записал макрос и нашел его в% APPDATA% \ Notepad ++ \ shortcuts.xml. Похоже, опубликовано в первом сообщении этой темы.

Я использую НПП Вер. 5.9.6.2 с Win7.

7
13.08.2013 17:44:09
этот файл не сохраняется, пока Notepad ++ не будет закрыт.
northben 12.06.2013 14:00:02

Я обнаружил, что плагин « Python Script » для Notepad ++ более полезен, поскольку с помощью этого плагина я мог писать простые макросы в форме python, а также он получил очень хорошую документацию и примеры макросов, написанных на python. Если вам хорошо с Python, то я думаю, что «Python Script» обеспечит справедливость. Для получения дополнительной информации см .: http://npppythonscript.sourceforge.net/

16
29.11.2013 07:20:36
Я обнаружил, что должен был установить Python Script 1.0.8.0, так как тот, который установлен менеджером плагинов, содержит ошибки
slonik 10.06.2016 09:50:06
Да, но невозможно «записать» действия, выполненные пользователем, и сохранить их как макросы, как это возможно, например, в MS Word или Excel, которые сохраняются в VBA. Это настоящий позор, потому что скрипт на python является более мощным, чем блокнот плюс код макроса, которому не хватает некоторой «эластичности» и ясности при чтении, исправлении и настройке макроса. Так что плагин скрипта Python не работает как макрос.
willy wonka 6.08.2019 21:54:49

Мой личный опыт показывает, что shortcuts.xml перезаписывается изначально загруженными + позже записанными макросами и настройками при выходе из Notepad ++. Таким образом, вы не можете использовать Notepad ++ для редактирования этого файла.

Закройте Notepad ++, отредактируйте shortcuts.xml с помощью другого инструмента, сохраните его и перезапустите Notepad ++.

0
30.12.2014 08:23:47

Выкладываю более 10 лет после ОП, но думаю, что это все еще актуальный вопрос (это для меня, по крайней мере). Сегодня в Руководстве пользователя Notepad ++ содержится довольно много информации, касающейся вопроса ОП:

Вот блок макрокода: замените SEARCHTEXT на REPLACETEXT, используя регулярные выражения "." находит / r и / n в каждом файле, соответствующем фильтру GLOBFILEFILTER в папке PATH (нет подпапок, не уверен, где этот флаг определен / установлен).

<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. Скорее создайте свой поиск и замените строки, записав макрос.
1
28.02.2020 18:58:00