Как написать макрос для Notepad ++? - PullRequest
32 голосов
/ 12 декабря 2008

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

Ответы [ 8 ]

49 голосов
/ 12 декабря 2008

Макросы в 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), а также в сам Блокнот ++ (возможно, активирующий пункты меню).
Я не думаю, что он будет записывать действия в диалогах (например, поиск / замена).

Глядя на файл 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) может иметь преимущество ...: -)

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

14 голосов
/ 29 ноября 2013

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

7 голосов
/ 08 декабря 2011

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

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

1 голос
/ 12 декабря 2008

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

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

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

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

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

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

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

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

0 голосов
/ 30 декабря 2014

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

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

0 голосов
/ 03 августа 2011

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

0 голосов
/ 12 мая 2011

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

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

0 голосов
/ 29 декабря 2009

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

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

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

...