2008-12-12 58 views

Respuesta

47

Las macros en el Bloc de notas ++ son simplemente un conjunto de operaciones codificadas: comienza a grabar, opera en el búfer, quizás activando menús, detiene la grabación y reproduce la macro.
Después de la investigación, descubrí que se guardan en el archivo shortcuts.xml en la sección Macros. Por ejemplo, tengo allí:

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

No he mirado en la fuente, sino de la mirada, yo diría que tenemos los mensajes enviados a Scintilla (el componente de edición, tal vez escriba 0 y 1), y a Notepad ++ sí mismo (probablemente activando elementos de menú).
No creo que registre acciones en diálogos (como buscar/reemplazar).

Al mirar el archivo Scintilla.iface, podemos ver que 2170 es el código de ReplaceSel (es decir, insertar cadena no es nada está seleccionado), 2327 es el comando Tab, y Resource Hacker (simplemente téngalo a mano ...) muestra que 42024 es el elemento de menú "Recortar el espacio posterior" y 41006 es "Guardar".
Supongo que el tipo de acción 0 es para los comandos de Scintilla con parámetros numéricos, el tipo 1 es para los comandos con el parámetro de cadena, 2 es para los comandos de Notepad ++.

Problema: Scintilla no tiene un "Reemplazar todos" comando: es la tarea del cliente para hacer la iteración, con o sin confirmación, etc.
Otro problema: parece de tipo 1 se limita a la acción 1 char (edité manualmente, al salir de N ++, se truncó).
Intenté algunos trucos, pero me temo que esa tarea está más allá de las capacidades macro.

Tal vez ahí es donde SciTE con su capacidad de scripting Lua (o Bloc de notas del programador que parece ser scripts con Python) tiene una ventaja ... :-)

[EDIT] Parece como si tuviera la macro anterior de this thread o un lugar similar ... :-) Supongo que las primeras líneas son innecesarias (efecto secundario o grabación) pero fueron buenos ejemplos de código de macro de todos modos.

+3

esta [wiki] (http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Editing_Configuration_Files#.3CMacros.3E) artículo tiene un desglose de los indicadores de atributos Pete

+0

por cierto, se HACE acciones de diálogo de registro. Usé la macro para buscar/reemplazar varias veces en un documento y funcionó perfectamente. Sin embargo, requiere que haga clic en Aceptar después de cada búsqueda. – Derek

+0

parece que no está guardado en este archivo cuando no tiene un atajo de teclado asociado ... –

1

Este post puede ayudar como un poco relacionados:

Using RegEX To Prefix And Append In Notepad++

Suponiendo palabras alfanuméricos, puede utilizar:

Buscar =^([A-Za-z0-9 ] +) $ replace = poder: "\ 1"

O, si lo que desea es poner de relieve las líneas y el uso de "reemplazar todo" & "en la selección" (con la misma sustituir):

Buscar =^(. +) $

^apunta al inicio de la línea. $ apunta al final de la línea.

\ 1 será la coincidencia de origen entre paréntesis.

0

En realidad, el archivo shortcuts.xml no hace no almacena las macros generadas por el usuario y no hay candidatos obvios que contengan esta información. Estas instrucciones están desactualizadas.

Al contrario de las sugerencias de varios sitios web, el almacenamiento de macros generadas por el usuario no está habilitado para v.5.4.2. Ese archivo XML está allí, pero su macro no se almacena en.

Supongo que es un error que se solucionará en la próxima versión.

+6

-1: esto no responde la pregunta. –

+1

¡Cómo si la característica no funciona! (Afortunadamente, se ha solucionado ahora.) – svend

+0

Todavía no funciona en 5.6.4. Gorrón. –

0

No estoy seguro de si esto ayuda, pero necesitaba crear una macro para contener un fragmento, así que simplemente grabé insertando los elementos y estableciendo un acceso directo a él. De acuerdo, no estoy usando la versión 5.9, por lo que podría haber algunas pequeñas diferencias de versión. Para acceder al grabador de macros, vaya a Macro> Iniciar grabación. Luego realizará su acción y luego vaya a Macro> Detener grabación. Recomiendo jugarlo para asegurarse de que sea correcto y luego guardar y configurar la tecla de acceso directo.

Espero que ayude.

0

Acabo de hacer esto en v5.9.1. Simplemente vaya al Menú Macro, haga clic en "Comenzar Grabación", realice sus 3 reemplaza todos los comandos, luego detenga la grabación. Luego puede seleccionar "Guardar macro grabada actual" y reproducirla tantas veces como quiera, y realizará las sustituciones como espera.

8

Grabé una macro y la encontré en% APPDATA% \ Notepad ++ \ shortcuts.xml. Parece publicado en la primera publicación de este hilo.

Uso NPP Ver. 5.9.6.2 con Win7.

+2

este archivo no se guarda hasta que Notepad ++ se cierre. – northben

11

me pareció 'script Python' plug-in para Notepad ++ más útil ya que con el plugin, podría escribir macros simples en forma de pitón y también ha conseguido muy buenos macros documentación y ejemplo escritos en Python también. Si te sientes cómodo con Python, entonces creo que 'Python Script' te dará justicia. Para obtener más información, consulte: http://npppythonscript.sourceforge.net/

+0

¡Esta debería ser la respuesta aceptada! – slonik

+0

Descubrí que tenía que instalar Python Script 1.0.8.0 ya que el que instaló el administrador de complementos tiene errores – slonik

1

Mi experiencia personal es que shortcuts.xml se sobrescribe con las macros y ajustes inicialmente cargados + posteriormente grabados cuando sale Notepad ++. Por lo tanto, no puede usar Notepad ++ para editar este archivo.

Cierre Notepad ++, edite accesos directos.xml con otra herramienta, guárdelo y reinicie Notepad ++.