Grep-ähnliche Funktionalität für Notepad ++?


52

Ich möchte eine grep-ähnliche Funktionalität in Notepad ++ haben.

In der einfachsten Version möchte ich in der Lage sein, alle Zeilen aus dem aktuellen Puffer, die das Wort enthalten, fooin einen neuen Puffer zu kopieren . Ich kann das TextFX-Plugin verwenden, um alle Zeilen ohne auszublenden foo, aber das macht nicht alles, was ich will (es geht verloren auf Alt- Tab, ich kann nicht nur die passenden Zeilen kopieren usw.).

Antworten:


79

Ctrl+ F-> Zu den Mark tab -> Toggle Lesezeichen Linie -> Klicken Sie auf Mark All .

Wählen Sie das Menü Suchen -> Lesezeichen -> Mit Lesezeichen versehene Zeilen kopieren .


5
Nett, danke. Sie können auch für einen armen Mann mit Lesezeichen markierte Zeilen abschneiden grep -v.
ARRG

2
In späteren Versionen, z. B. 5.4.5, gibt es keine Registerkarte "Markieren". Stattdessen befindet sich auf der Registerkarte "Suchen" das Kontrollkästchen "Linie markieren". Und "Copy Bookmarded Lines" befindet sich direkt im "Search" -Menü.
Peter Mortensen

@ARRG Kann die ausgeschnittenen Lesezeichenzeilen oder die kopierten Lesezeichenzeilen in der aktuellen Version nicht finden. Wo ist sie?
Nicolas Thery

Arbeiten wie Charme :-)
Sundararaj Govindasamy

12

Ich habe mich nur mit der gleichen Frage befasst. Ich bin mir nicht sicher, ob Sie es wissen. Im Dialogfeld "Suchen" können Sie "Alle in aktuellem Dokument suchen" auswählen. Daraufhin wird unten ein Fenster mit den übereinstimmenden Zeilen angezeigt. Dann können Sie das in ein neues Dokument kopieren.

Leider enthält das Ergebnis einige irrelevante Informationen (Zeilennummer usw.), die Sie jedoch im Spaltenmodus herausfiltern können.


1
Die hinzugefügten Zeilennummern könnten sogar ein Merkmal sein :)
Frank Meulenaar

2
Sie könnten dieses Plugin nützlich finden code.google.com/p/searchplus
Amarghosh

@Amarghosh Nettes Plugin, aber wenig Ergonomie (warum Tasten und keine Tastaturkürzel?). Schöner Fang :)
Benj

@Benji Alt-Q startet das Plugin. Obwohl im Plugin-Fenster keine Tastenkombinationen vorhanden sind, wurde die grundlegende Registerkartennavigation aktiviert. Wenn genügend Interesse an dem Plugin besteht, werde ich versuchen, nach einiger Zeit weitere Funktionen hinzuzufügen. Vielen Dank für die Rückmeldung :)
Amarghosh

2

Eine weitere großartige Lösung ist die Verwendung des NppExec-Plugins, um einen grep-Befehl für Notepad ++ hinzuzufügen.

Der Hauptvorteil gegenüber der "Lesezeichen" -Lösung besteht darin, dass sie insbesondere bei großen Dateien viel schneller ausgeführt wird und Sie Ihre Originaldatei nicht ändern müssen. Beachten Sie, dass Sie einmal ein kleines Skript erstellen müssen, um diese Funktion in Ihrem Notepad ++ verfügbar zu machen.

Mein Lösungsbeispiel ist für Windows und ich verwende findstr , ein grep-ähnliches Befehlstool, das auf allen Windows-Computern verfügbar ist. Aber Sie können natürlich nutzen auch andere grep Klon Ihrer Wahl.

Schritt 1: Installieren Sie das NppExec-Plugin

Gehen Sie zu Plugins / Plugin Manager / Show Plugin Manager, scrollen Sie nach unten zu NppExec, wählen Sie dieses Plugin aus und klicken Sie auf Installieren. Möglicherweise müssen Sie Ihren Notepad ++ neu starten, um den Installationsvorgang abzuschließen.

Schritt 2: Erstellen Sie ein kleines Skript für NppExec

Gehen Sie zu Plugins / NppExec / Execute, geben Sie das folgende Skript ein und speichern Sie es als "grep":

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

(Bitte überprüfen Sie, ob der Pfad für die OUTFILE für Ihre Umgebung funktioniert.)

Schritt 3: Fügen Sie einen Menüeintrag für Ihr Skript hinzu (optional)

Gehen Sie zu Plugins / NppExec / Advanced Options, wählen Sie das Skript "grep" unter Associated scriptund klicken Sie auf OK, um zu speichern. Starten Sie Notepad neu, wie von NppExec angefordert, um das Hinzufügen des neuen Menüelements abzuschließen.

Schritt 4: Fügen Sie eine Verknüpfung für Ihr Skript hinzu (optional)

Gehen Sie zu Settings / Shortcut Mapper / Plugin commands, scrollen Sie nach unten, um Ihren Skriptbefehl "grep" zu finden, und definieren Sie eine Verknüpfung dafür. z.BALT-G


Zunächst einmal vielen Dank für eine großartige Antwort, die jahrelang darauf gewartet hat, bewertet zu werden ... :-) Ich dachte, ich hätte ein paar Probleme mit dem Skript, es hat nicht funktioniert. Dann habe ich gemerkt, dass wir die Pfade anpassen sollen, aber du hast es nicht explizit erwähnt, also habe ich es einfach blind kopiert! Ich arbeite so schnell, dass es mich verlangsamt
:-)

Vielen Dank für das Feedback. Ich werde das zu meiner Antwort hinzufügen.
Erik Kalkoken

Noch ein kleiner Hinweis: $(FULL_CURRENT_PATH)Gibt keinen Pfad zurück, wenn die Datei noch nicht gespeichert ist. Sie könnten erwarten, dass es sich irgendwo befindet (temporäres Verzeichnis?), Aber nicht wirklich. Diese ungespeicherte Dateisituation kann durchaus üblich sein. Fügen Sie einfach etwas aus einem Protokoll ein, um es zu überprüfen. Wir können dieses Skript perfektionieren, um die Datei zu speichern, wenn sie noch nicht gespeichert ist. Der Einfachheit halber möchte ich mich jedoch nur daran erinnern, sie zu speichern manuell vor dem Greifen. Vielen Dank.
1.

Funktioniert dies, wenn die Suchzeichenfolge Leerzeichen enthält? oder andere Sonderzeichen?
G-Man sagt, dass Monica am

Ja, das funktioniert
Erik Kalkoken

-1

Schritt 5: Erstellen Sie ein Skript zum schnellen Speichern und Speichern eines Grep-Dokuments

Gehen Sie zu Plugins / NppExec / Execute, geben Sie das folgende Skript ein und speichern Sie es als "grep":

SET local AUTOSAVEFILE = "% tmp% \ NpPPautosave.tmp"
SET local OUTFILE = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "Eingabezeichenfolge für GREP"
cmd / c findstr $ ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)


Wo ist Schritt 1, 2, 3 und 4?
Pierre.Vriens

(1) Wir ziehen es weitestgehend vor, dass Antworten für sich allein stehen. Es sieht so aus, als müsste (mindestens) ein Schritt ausgeführt werden, bevor jemand Ihre Antwort verwenden kann (Hinweis: Schritt 1). Bitte geben Sie dies in Ihrer Antwort an. (2) Es scheint sehr stark zu sein, dass Ihre Antwort auf den Schultern von Erik Kalkoken steht . Wenn du das machst, solltest du das ausdrücklich sagen. … (Fortsetzung)
G-Man sagt, dass Monica am

(Fortsetzung)… (3) Ist Ihre Antwort besser als die von Erik? Wenn ja, erläutern Sie bitte, wie und warum. (In der Tat wäre es nett, wenn Sie erklären würden, was die Antwort bewirkt und wie sie zu verwenden ist.) Wenn nein, warum haben Sie sie veröffentlicht? (4) Glauben Sie, dass es in irgendeiner Weise besser ist, einen fest codierten Ausgabedateinamen zu verwenden, als einen, der auf dem aktuellen Dateinamen basiert? (5) Gibt es einen Vorteil, findstrwenn Sie die Autosavefile-Datei anstelle der aktuellen Datei verwenden? (6) Warum verwendet Ihre Antwort sowohl C:\temp als auch C:\tmp? …… Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie Ihre Antwort, um sie klarer und vollständiger zu gestalten.
G-Man sagt, dass Monica am

(1) "Ein Schritt, der vor jemandem getan werden muss" - alle Erik-Schritte von 1 bis 4. (2) Sie müssen 50 Reputation haben, um einen Kommentar abzugeben. (um Eriks Beitrag zu kommentieren) (3) Ja, meine Antwort ist etwas besser, da Eriks Antwort nicht funktioniert, bevor das Dokument auf der Festplatte gespeichert wurde. Ich möchte keine temporäre Datei nur für Grep speichern. "Was die Antwort macht und wie man sie benutzt" - mein Code speichert nur den geöffneten Text in Notepad ++ in einer temporären Datei in HDD. Dies ist die Zeile "NPP_SAVEAS", in der nur automatisch Text auf der Festplatte gespeichert wird. (4) Nicht! Genau genommen nicht. (5) Ja! Der Erik-Core funktioniert nicht. Bevor Sie auf Festplatte speichern, lesen Sie meine (3) Antwort.
Kasumiru

(6) Sory, ich war in Eile und Fehler, meine Fenster Cygwin haben tmp und temp dirs. "Bitte antworten Sie nicht in Kommentaren" - sory, aber ich habe meine Antwort geschrieben, bevor Sie diesen Kommentar lesen
Kasumiru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.