web-dev-qa-db-fra.com

Comment écrire une macro pour Notepad ++?

Je voudrais écrire une macro pour Notepad ++ qui devrait remplacer char 1, char 2, char 3 avec char4, char5, char6, respectivement . Merci

30
Igor Drincic

Les macros dans Notepad ++ ne sont que des opérations codées: vous démarrez l’enregistrement, utilisez le tampon, activez éventuellement des menus, arrêtez l’enregistrement, puis lisez la macro.
Après enquête, j'ai découvert qu'ils étaient enregistrés dans le fichier shortcuts.xml de la section Macros. Par exemple, j'ai là:

<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>

Je n'ai pas regardé la source, mais d'après l'apparence, je dirais que nous avons des messages envoyés à Scintilla (le composant d'édition, tapez peut-être 0 et 1) et à Notepad ++ lui-même (activant probablement des éléments de menu).
Je ne pense pas que les actions seront enregistrées dans les dialogues (comme rechercher/remplacer).

En regardant dans le fichier Scintilla.iface , nous pouvons voir que 2170 est le code de ReplaceSel (c’est-à-dire que la chaîne d’insertion n’est pas sélectionnée), 2327 est une commande de tabulation et Resource Hacker (le garde à portée de main ...) indique 42024 correspond à l'élément de menu "Rogner l'espace de fuite" et 41006 à "Enregistrer".
Je suppose que le type d’action 0 concerne les commandes Scintilla avec des paramètres numériques, le type 1 les commandes avec le paramètre chaîne, le 2 les commandes Notepad ++.

Problème: Scintilla n’a pas de commande "Remplacer tout": c’est la tâche du client de faire l’itération, avec ou sans confirmation, etc.
Un autre problème: il semble que l’action de type 1 soit limitée à 1 caractère (j’ai édité manuellement, lorsqu’on quittait N ++, elle était tronquée).
J'ai essayé quelques astuces, mais je crains qu'une telle tâche dépasse les capacités de la macro.

Peut-être que c'est là que SciTE avec sa capacité de script Lua (ou le bloc-notes du programmeur qui semble être scriptable avec Python) a un bord ... :-)

[EDIT] On dirait que j'ai obtenu la macro ci-dessus de ce fil ou un endroit similaire ... :-) J'imagine que les premières lignes ne sont pas nécessaires (effet secondaire ou enregistrement), mais c'étaient quand même de bons exemples de code macro.

48
PhiLho

J'ai trouvé le plugin 'Python Script' pour Notepad ++ plus utile car avec le plugin, je pouvais écrire de simples macros sous la forme de python. Il possède également une très bonne documentation et des exemples de macros écrits en python. Si vous êtes assez à l'aise avec Python, alors je pense que 'Script Python' sera un justice . Pour plus d'informations, reportez-vous à: http://npppythonscript.sourceforge.net/

13
Sandeep

J'ai enregistré une macro et je l'ai trouvée dans% APPDATA%\Notepad ++\shortcuts.xml. Il semble que posté dans le premier post de ce fil.

J'utilise NPP Ver. 5.9.6.2 avec Win7.

7
Wolli

Ce post peut vous aider comme un peu lié:

Utilisation de RegEX pour préfixer et ajouter dans Notepad ++

En supposant des mots alphanumériques, vous pouvez utiliser:

Rechercher = ^ ([A-Za-z0-9] +) $ Remplacer = capable: "\ 1"

Ou, si vous souhaitez simplement mettre en évidence les lignes et utiliser "Remplacer tout" & "Dans la sélection" (avec le même remplacement):

Recherche = ^ (. +) $

^ pointe vers le début de la ligne . $ pointe vers la fin de la ligne.

\ 1 sera la correspondance source entre les parenthèses.

1
Samiksha

D'après mon expérience personnelle, shortcuts.xml est écrasé par les macros et les paramètres enregistrés initialement chargés ultérieurement lors de la fermeture de Notepad ++. Vous ne pouvez donc pas utiliser Notepad ++ lui-même pour éditer ce fichier.

Fermez Notepad ++, éditez shortcuts.xml avec un autre outil, enregistrez-le et redémarrez Notepad ++.

0
Lerin Sonberg