Rekursives grep im Verzeichnis mit Helm und / oder Projektil?


11

Ein rekursiver Grep in einem Verzeichnis sollte die einfachste Sache sein, aber ich habe das Rezept noch nicht gefunden, damit es funktioniert. Ich jongliere zwischen den folgenden Befehlen und bin mir nicht sicher, in welcher Funktion sich die Funktionalität befindet:

  • helm-find-files: Das Problem ist, dass es wirklich schlecht ist, ein Verzeichnis rekursiv zu finden.
  • projectile-find-dir: Das ist großartig, um das Verzeichnis zu finden! Obwohl Sie helm complete verwenden, werden Sie nicht im helm-Modus angezeigt, sodass der C-u C-sBefehl hier nicht funktioniert.
  • helm-find: macht die Rekursion richtig, zielt aber auf Dateien ab, nicht auf Verzeichnisse
  • helm-projectile-find-dir: Scheint das zu sein, was ich will.

1
Ich liebe ag und ag-mode dafür, der silberne Sucher schlägt grep mit einer Hand auf dem Rücken :-), weiß aber nicht, wie man es auf das Projektil aufmerksam macht
Tom Regner

Mx projectile-ag vielleicht? («Projektil-Präfix» A oder «Projektil-Präfix» a - je nach Version)
Mekk

2
Zum Originalplakat: Ich verstehe nicht ganz, was Ihr Zweck ist. projectile-ack und projectile-ag sind beide großartige rekursive Greps innerhalb eines (gesamten) Projektilprojekts. Sind sie nicht das, was du brauchst?
Mekk

Antworten:


10

Sie haben zwei Möglichkeiten:

  • Verwendung helm-projectile-grep/ack/ag: Sie können ab dem Projektstamm nach allem suchen. Wenn Sie später die Suchergebnisse speichern möchten, drücken Sie F3oder TAB, um zum Aktionsmenü zu wechseln und die dritte Aktion auszuwählen. So navigieren Sie im hgrepPuffer:

    • C-<down>: Gehe zum nächsten Spiel und öffne das Spiel.
    • C-<up>: Gehe zum vorherigen Spiel und öffne das Spiel.
    • M-<down>: Gehe zum nächsten Spiel, ohne das Spiel zu öffnen.
    • M-<up>: Gehe zum nächsten Spiel, ohne das Spiel zu öffnen.
    • C-o: Aktuelle Übereinstimmung in einem anderen Fenster öffnen.
    • RET: Aktuelle Übereinstimmung im aktuellen Fenster öffnen.
  • Verwenden Sie helm-projectile-find-dir(beachten Sie das helmPräfix; Sie müssen helm-projectileim Allgemeinen die richtigen Helm-Befehle aus dem Paket verwenden): Beschränken Sie sich auf ein gewünschtes Verzeichnis und drücken Sie, C-u C-sum rekursiv in diesem Verzeichnis zu suchen. Wenn Sie nicht drücken C-u, wird nur in diesem Verzeichnis gesucht, ohne tiefer zu gehen.

Hoffentlich hilft das.


1
Sie haben mir gerade ermöglicht, einen großen Gewinn freizuschalten, indem Sie mich über diese "TAB" -Aktion in einem Projektil-Suchergebnis informiert haben. Vielen Dank. Danke mein Herr.
Emish

5

Ein rekursiver grep in einem Verzeichnis sollte die einfachste Sache sein

Für ein einfaches rekursives grep im aktuellen Verzeichnis einfach: M-x grepdann im Minibuffer : Run grep (like this): grep -nHr "pattern". (Beachten Sie das Flag -r).

Sie könnten auch interessiert sein an rgrep:

rgrep ist eine interaktive automatisch geladene kompilierte Lisp-Funktion in
`grep.el '.

(rgrep REGEXP & optional DATEIEN DIR BESTÄTIGEN)

Rekursiv nach REGEXP in FILES im Verzeichnisbaum suchen, der auf DIR verwurzelt ist. Die Suche ist auf Dateinamen beschränkt, die mit den Shell-Musterdateien übereinstimmen. DATEIEN können Abkürzungen verwenden, die in grep-files-aliases', e.g. enteringch ' definiert sind. Dies entspricht "*. [Ch]".


Das ist nicht mit dem Projektil verbunden, das es im Kontext sein sollte.
RichieHH

2

Zusätzlich zu den in den anderen Antworten erwähnten Werkzeugen besteht eine weitere coole Funktion darin find-grep-dired, einen diredPuffer zu erstellen, der alle Dateien enthält, die einem rekursiven Grep-Muster entsprechen.

Es wird nur ausgeführt find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lsund zeigt die Ergebnisse in einem diredPuffer an.


1

Du könntest es versuchen helm-do-grep. Wenn Sie es mit einem Präfix arg aufrufen, erhalten Sie einen rekursiven Grep, wie im Helm-Wiki erläutert .

Wenn Sie helm-do-grep rekursiv starten möchten, ohne helm-find-files zu starten, gehen Sie wie folgt vor:

Cu Helm-Befehl-Präfix-Schlüssel Mg s

HINWEIS: Wenn Sie vergessen haben, Cu vor Mg s zu drücken, können Sie dies nach der Dateiauswahl tun.

Sie werden aufgefordert, auszuwählen, in welcher Kategorie von Dateien gesucht werden soll: Verwenden Sie die Wilcard-Syntax wie z. B. * .el (nur in .el-Dateien suchen).

Standardmäßig wird die Erweiterung der Datei am Punkt verwendet, wenn sich der Cursor auf einem Dateinamen befindet. Befindet sich der Cursor im Stammverzeichnis eines Verzeichnisses, werden alle im Verzeichnis gefundenen Dateinamenerweiterungen, die nicht mit grep-find-ignore-files übereinstimmen, in die Eingabeaufforderung eingefügt.

Versuchen Sie es so:

C-u helm-command-prefix-key M-g s


0

helm-projectile-find-dirist wahrscheinlich die richtige Funktionalität. Du kannst

  1. Suchen Sie ein Verzeichnis wie in projectile-find-dir
  2. Dann beenden Sie den Helm-Modus, in dem Sie nach Bedarf C-u C-seine rekursive Suche durchführen können.

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.