Fonctionnalité de type Grep pour Notepad ++?

52

J'aimerais disposer de fonctionnalités similaires à celles de grep dans Notepad ++.

Dans la version la plus simple, j'aimerais pouvoir copier toutes les lignes du tampon actuel contenant le mot foodans un nouveau tampon. Je peux utiliser le plugin TextFX pour masquer toutes les lignes sans foo, mais cela ne fait pas tout ce que je veux (c'est perdu sur Alt- Tab, je ne peux pas copier uniquement les lignes correspondantes, etc.).

Frank Meulenaar
la source

Réponses:

79

Ctrl+ F-> allez dans l' onglet Marquer -> basculer la ligne du signet -> Cliquez sur Tout marquer .

Sélectionnez le menu Recherche -> Signet -> Copier les lignes marquées .

kev
la source
5
Nice, merci Vous pouvez aussi «couper des lignes avec des signets» pour un homme pauvre grep -v.
ARRG
2
Dans les versions ultérieures, par exemple 5.4.5, il n'y a pas d'onglet "Mark". Au lieu de cela, il y a une case à cocher "Marquer la ligne" dans l'onglet "Rechercher". Et "Copier les lignes classées" se trouve directement dans le menu "Rechercher".
Peter Mortensen
@ARRG Impossible de trouver les lignes coupées dans les signets ou Copier les lignes marquées dans la version actuelle, où est-il?
Nicolas Thery
Travailler comme un charme :-)
Sundararaj Govindasamy
12

Je cherchais juste dans cette même question. Je ne sais pas si vous êtes au courant. Dans la boîte de dialogue Rechercher, vous pouvez tout rechercher dans le document actuel, ce qui ouvrira une fenêtre en bas indiquant les lignes correspondantes. Ensuite, vous pouvez copier cela dans un nouveau document.

Malheureusement, il contient des informations superflues dans les résultats (numéro de ligne, etc.), mais vous pouvez les filtrer en utilisant le mode colonne.

Nick S
la source
1
Les numéros de ligne ajoutés pourraient même constituer une fonction :)
Frank Meulenaar le
2
Vous pouvez trouver ce plugin utile code.google.com/p/searchplus
Amarghosh
@Amarghosh Joli plugin, mais manque un peu d'ergonomie (pourquoi des boutons et pas de raccourcis clavier?). Belle prise :)
Benj
@ Benji Alt-Q lancera le plugin. Même s'il n'y a pas de touches de raccourci dans la fenêtre du plugin, la navigation de base par onglets a été activée. Si le plugin suscite suffisamment d’intérêt, je vais essayer d’ajouter d’autres fonctionnalités au fur et à mesure que je gagne du temps. Merci pour les commentaires :)
Amarghosh
2

Une autre solution intéressante consiste à utiliser le plug-in NppExec pour ajouter une commande grep à Notepad ++.

L'avantage principal par rapport à la solution "Signets" est qu'elle s'exécute beaucoup plus rapidement, en particulier pour les fichiers volumineux, sans avoir à modifier votre fichier d'origine. Notez que vous devez créer un petit script une fois pour que cette fonctionnalité soit disponible dans votre Notepad ++.

Mon exemple de solution concerne Windows et j'utilise findstr , un outil de commande similaire à celui de grep disponible sur toutes les machines Windows. Mais vous pouvez bien sûr utiliser tout autre clone de grep de votre choix.

Étape 1: Installer le plugin NppExec

Allez à Plugins / Plugin Manager / Show Plugin Manager, faites défiler jusqu'à NppExec, sélectionnez ce plugin et cliquez sur Installer. Vous devrez peut-être redémarrer votre Notepad ++ pour terminer le processus d'installation.

Étape 2: Créez un petit script pour NppExec

Allez à Plugins / NppExec / Execute, entrez le script suivant et enregistrez-le sous "grep":

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

(veuillez vérifier si le chemin pour OUTFILE fonctionne pour votre environnement)

Étape 3: Ajouter un élément de menu pour votre script (facultatif)

Allez à Plugins / NppExec / Advanced Options, choisissez le script "grep" sous Associated scriptet cliquez sur OK pour enregistrer. Redémarrez le Bloc-notes comme demandé par NppExec pour terminer l’ajout du nouvel élément de menu.

Étape 4: ajoutez un raccourci pour votre script (facultatif)

Allez à Settings / Shortcut Mapper / Plugin commands, faites défiler pour trouver votre commande de script "grep" et définissez un raccourci pour elle. par exempleALT-G

Erik Kalkoken
la source
Tout d'abord, merci pour cette excellente réponse qui attend depuis des années pour être voté ...: -) Je pensais avoir des problèmes avec le script, cela n'a pas fonctionné. Ensuite, j'ai remarqué que nous étions supposés adapter les chemins, etc., mais vous n'en avez pas parlé explicitement, alors j'ai simplement copié-collé à l'aveugle! Je travaille si vite que ça me ralentit: -)
pgr
merci beaucoup pour les commentaires. J'ajouterai cela à ma réponse.
Erik Kalkoken
Une autre petite remarque: $(FULL_CURRENT_PATH)ne renverra aucun chemin si le fichier n’est pas encore enregistré. Vous pourriez vous attendre à ce qu'il réside quelque part (répertoire temporaire?), Mais pas vraiment. Cette situation de fichier non enregistré peut être assez courante, vous devez simplement coller quelque chose d'un journal dans grep-le ... nous pourrions perfectionner ce script pour enregistrer le fichier s'il n'est pas encore enregistré - mais pour des raisons de simplicité, je me rappelle simplement de sauvegarder manuellement avant grepping. Merci.
pgr
Cela fonctionne-t-il si la chaîne de recherche contient des espaces? ou d'autres personnages spéciaux?
G-Man dit 'Réintégrez Monica' le
Oui ça marche
Erik Kalkoken
-1

Étape 5: Créer un script pour enregistrer rapidement et document grep

Allez à Plugins / NppExec / Execute, entrez le script suivant et enregistrez-le sous le nom "grep":

SET local AUTOSAVEFILE = "% tmp% \ NpPPautosave.tmp"
SET local OUTFILE = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "Chaîne d'entrée pour GREP"
cmd / c find ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)

Kasumiru
la source
Où sont les étapes 1, 2, 3 et 4?
Pierre.Vriens
(1) Nous préférons, dans la mesure du possible, que les réponses soient prises isolément. Il semble qu'il y ait (au moins) une étape à franchir avant que quelqu'un puisse utiliser votre réponse (indice: Étape 1); veuillez l'inclure dans votre réponse. (2) Il semble très fortement que votre réponse repose sur les épaules de la réponse d' Erik Kalkoken . Si vous voulez faire cela, vous devriez le dire explicitement. … (Suite)
G-Man dit 'Réintégrez Monica' le
(Suite)… (3) Votre réponse est-elle meilleure que celle d'Erik? Si oui, veuillez expliquer comment et pourquoi. (En fait, ce serait bien si vous pouviez expliquer en quoi consiste la réponse et comment l’utiliser.) Sinon, pourquoi l’avez-vous postée? (4) Pensez-vous qu’il est en quelque sorte préférable d’utiliser un nom de fichier de sortie codé en dur plutôt que celui qui est basé sur le nom de fichier actuel? (5) Existe-t-il un avantage à utiliser findstrle fichier autosave plutôt que le fichier actuel? (6) Pourquoi votre réponse utilise-t-elle les deux C:\temp et C:\tmp? …… S'il vous plaît ne répondez pas dans les commentaires; éditez votre réponse pour la rendre plus claire et plus complète.
G-Man dit 'Réintégrez Monica' le
(1) "une étape à accomplir avant tout le monde" - toutes les réponses d'Erik vont de 1 à 4. (2) Vous devez avoir 50 points de réputation pour pouvoir commenter. (commenter Erik post) (3) Oui, ma réponse est un peu meilleure, car la réponse d'Erik ne fonctionne pas avant que le document ait été enregistré sur le disque dur. Je ne veux pas sauvegarder le fichier temporaire juste pour le grep. "ce que la réponse fait, et comment l'utiliser" - mon code suffit de sauvegarder le texte ouvert dans le bloc-notes ++ dans un fichier temporaire au format HDD. C'est la ligne "NPP_SAVEAS" qui sauvegarde automatiquement le texte sur le disque dur. (4) pas! exactpy pas. (5) oui! Le noyau Erik ne fonctionne pas, avant de sauvegarder sur un disque dur, regardez ma réponse (3).
Kasumiru
(6) Sory, j'étais pressé et par erreur, mes fenêtres cygwin ont des répertoires tmp et temp. "S'il vous plaît ne répondez pas dans les commentaires" - sory, mais je n'écrivais pas ma réponse avant de lire ce commentaire
Kasumiru