¿Funcionalidad grep para Notepad ++?

52

Me gustaría tener alguna funcionalidad similar a grep en Notepad ++.

En su versión más simple, me gustaría poder copiar todas las líneas del búfer actual que contiene la palabra fooa un nuevo búfer. Puedo utilizar el TextFX plugin para ocultar todas las líneas sin foo, pero eso no quiere hacer todo lo que yo quiero (que se ha perdido en Alt- Tab, no puedo copiar sólo las líneas coincidentes, etc.).

Frank Meulenaar
fuente

Respuestas:

79

Ctrl+ F-> vaya a la pestaña Marcar -> alternar la línea de Marcador -> Haga clic en Marcar todo .

Seleccione el menú Buscar -> Marcador -> Copiar líneas marcadas .

kev
fuente
55
Genial gracias. También puede 'cortar líneas marcadas' para un hombre pobre grep -v.
ARRG
2
En versiones posteriores, por ejemplo, 5.4.5, no hay ninguna pestaña "Marcar". En cambio, hay una casilla de verificación, "Marcar línea", en la pestaña "Buscar". Y "Copiar líneas marcadas" está directamente en el menú "Buscar".
Peter Mortensen
@ARRG No puedo encontrar las líneas marcadas cortadas o Copiar líneas marcadas en la versión actual, ¿dónde está?
Nicolas Thery
Trabajando como encanto :-)
Sundararaj Govindasamy
12

Estaba estudiando esta misma pregunta. No estoy seguro si lo sabes; en el cuadro de diálogo Buscar, puede Buscar todo en el documento actual, que abrirá una ventana en la parte inferior que muestra las líneas coincidentes. Luego puede copiar eso en un nuevo documento.

Desafortunadamente, incluye información extraña en los resultados (número de línea, etc.), pero puede filtrarla usando el modo columna.

Nick S
fuente
1
Los números de línea agregados podrían incluso ser una característica :)
Frank Meulenaar
2
Puede encontrar este complemento útil code.google.com/p/searchplus
Amarghosh el
@Amarghosh Bonito complemento, pero carece de un poco de ergonomía (¿por qué botones y sin atajos de teclado?). Buena captura :)
Benj
@Benji Alt-Q lanzará el complemento. Aunque no hay teclas de acceso directo dentro de la ventana del complemento, se ha habilitado la navegación básica por pestañas. Si hay suficiente interés en el complemento, intentaré agregar más funciones a medida que tenga tiempo. Gracias por los comentarios :)
Amarghosh
2

Otra gran solución es usar el complemento NppExec para agregar un comando grep para Notepad ++.

La principal ventaja sobre la solución "Marcadores" es que se ejecuta mucho más rápido, especialmente para archivos grandes y no tiene que modificar su archivo original. Tenga en cuenta que debe crear una pequeña secuencia de comandos una vez para que esta función esté disponible en su Notepad ++.

Mi ejemplo de solución es para Windows y utilizo findtr , que es una herramienta de comando similar a grep disponible en todas las máquinas con Windows. Pero, por supuesto, también puede usar cualquier otro clon grep de su elección.

Paso 1: Instalar el complemento NppExec

Vaya a Plugins / Plugin Manager / Show Plugin Manager, desplácese hacia abajo hasta NppExec, seleccione este complemento y haga clic en Instalar. Es posible que deba reiniciar su Notepad ++ para completar el proceso de instalación.

Paso 2: crea un pequeño script para NppExec

Vaya a Plugins / NppExec / Execute, ingrese el siguiente script y guárdelo como "grep":

SET local OUTFILE = "c:\temp\$(FILE_NAME).temp"
INPUTBOX "Input filter string"
cmd /c findstr $(INPUT) "$(FULL_CURRENT_PATH)" >$(OUTFILE)
NPP_OPEN $(OUTFILE)

(verifique si la ruta para OUTFILE funciona para su entorno)

Paso 3: Agregue un elemento de menú para su script (Opcional)

Vaya a Plugins / NppExec / Advanced Options, elija la secuencia de comandos "grep" debajo Associated scripty haga clic en Aceptar para guardar. Reinicie el Bloc de notas según lo solicite NppExec para completar la adición del nuevo elemento del menú.

Paso 4: Agregue un acceso directo para su script (Opcional)

Vaya a Settings / Shortcut Mapper / Plugin commands, desplácese hacia abajo para encontrar su comando de script "grep" y defina un acceso directo para él. p.ejALT-G

Erik Kalkoken
fuente
En primer lugar, gracias por una gran respuesta que ha estado esperando años para ser votada ...: -) Pensé que estaba teniendo algunos problemas con el script, no funcionó. Luego me di cuenta de que se suponía que debíamos adaptar los caminos, etc., pero no lo mencionaste explícitamente, ¡así que solo copié y pegué a ciegas! Trabajo tan rápido que me ralentiza: -)
pgr
Muchas gracias por los comentarios. Agregaré eso a mi respuesta.
Erik Kalkoken
Otra pequeña nota: $(FULL_CURRENT_PATH)no devolverá ninguna ruta si el archivo aún no está guardado. Puede esperar que resida en algún lugar (¿directorio temporal?), Pero en realidad no. Esta situación de archivo no guardado puede ser bastante común, simplemente pegue algo de un registro para agruparlo ... podríamos perfeccionar este script para guardar el archivo si aún no está guardado, pero por simplicidad, solo me recordaré guardar manualmente antes de grepping. Gracias.
pgr
¿Funciona esto si la cadena de búsqueda contiene espacios? u otros personajes especiales?
G-Man dice 'restablecer a Mónica' el
Sí, eso funciona
Erik Kalkoken
-1

Paso 5: crea un script para guardar rápidamente y un documento grep

Vaya a Complementos / NppExec / Execute, ingrese el siguiente script y guárdelo como "grep":

SET local AUTOSAVEFILE = "% tmp% \ NpPPautosave.tmp"
SET local OUTFILE = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "Cadena de entrada para GREP"
cmd / c findtr $ (INP encuentra ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)

Kasumiru
fuente
¿Dónde están los pasos 1, 2, 3 y 4?
Pierre.Vriens el
(1) Preferimos, en la mayor medida posible, que las respuestas sean independientes. Parece que hay (al menos) un paso que debe hacerse antes de que alguien pueda usar su respuesta (pista: Paso 1); inclúyalo en su respuesta. (2) Parece muy fuerte que su respuesta está sobre los hombros de la respuesta de Erik Kalkoken . Si vas a hacer eso, debes decirlo explícitamente. … (Continúa)
G-Man dice 'Reincorporar a Monica' el
(Continúa) ... (3) ¿Es tu respuesta mejor que la de Erik? Si es así, explique cómo y por qué. (De hecho, sería bueno que explicaras lo que hace la respuesta y cómo usarla). Si no es así, ¿por qué la has publicado? (4) ¿Cree que de alguna manera es superior usar un nombre de archivo de salida codificado en lugar de uno que se base en el nombre de archivo actual? (5) ¿Hay alguna ventaja en ejecutarse findstren el archivo de guardado automático en lugar del archivo actual? (6) ¿Por qué su respuesta usa ambos C:\temp y C:\tmp? ... ... Por favor no responda en los comentarios; edite su respuesta para que sea más clara y completa.
G-Man dice 'restablecer a Monica' el
(1) "un paso que debe hacerse antes que alguien" - todos los pasos de Erik del 1 al 4. (2) Debes tener 50 reputación para comentar. (para comentar la publicación de Erik) (3) Sí, mi respuesta es un poco mejor, porque la respuesta de Erik no funciona antes de que el documento se guarde en el disco duro. No quiero guardar el archivo temporal solo por grep. "qué hace la respuesta y cómo usarla": mi código solo guarda el texto abierto en notepad ++ en un archivo temporal en hdd. Esta es la línea "NPP_SAVEAS" simplemente guarda automáticamente el texto en el disco duro. (4) ¡No! Exactamente no. (5) ¡Sí! El núcleo Erik no funciona, antes de guardar en el disco duro, mira mi (3) respuesta.
Kasumiru
(6) Sory, estaba apurado y equivocado, mi cygwin de Windows tiene directorios tmp y temp. "Por favor no responda en los comentarios" - sory, pero estaba escribiendo mi respuesta antes de leer este comentario
Kasumiru