Was ist der einfachste Weg, um im gesamten Inhalt aller Dateien im aktuellen Projekt nach einem regulären Ausdruck zu suchen, wobei nicht nützliche Dateien übersprungen werden?
Nutzlose Dateien sind kompilierte Dateien, importierte Bibliotheken, Versionskontrolldateien usw.
Mir ist bewusst rgrep
, aber es durchsucht einfach alles. Gibt es ein Paket, das "intelligent" sucht und verschiedene Programmiersprachen kennt, sodass ich es nicht für jedes einzelne Projekt konfigurieren müsste?
rgrep
ist etwas verwirrend, da standardmäßig alle Dateien ausgeschlossen werden, die Ihren Kriterien für "Unbrauchbare Dateien" entsprechen.Antworten:
Die projektbasierte Suche in Emacs kann mit Hilfe von Projectile durchgeführt werden .
Es ermöglicht die projektspezifische Konfiguration von Ignorierdateien (in einer
<projectroot>\.projectile
Datei) oder die Angabe von Unterverzeichnissen, in denen alle anderen Dateien überwacht und ignoriert werden sollen.Er kann laufen
grep
,ack
(erfordertack-and-a-half.el
) undag
(ag.el
) auf Dateien innerhalb des definierten Projektes (entweder auf der Grundlage der.projectile
Datei oder durch eine unterstützte VC - Datei der Suche nach einem Projektstamm zu definieren).Nützliche Befehle
(In Bezug auf die Suche in nützlichen Dateien)
Gemäß Projektil-Readme
C-c p s g
:: Führen Siegrep
die Dateien im Projekt aus.C-c p s a
:: Läuftack
auf dem Projekt. Benötigt das Vorhandensein von ack-and-a-half.C-c p s s
:: Läuftag
auf dem Projekt. Benötigt die Anwesenheit von ag.el.C-c p f
:: Zeigt eine Liste aller Dateien im Projekt an.C-c p d
:: Zeigt eine Liste aller Verzeichnisse im Projekt an.C-c p a
:: Wechseln Sie zwischen Dateien mit demselben Namen, aber unterschiedlicher Erweiterung im Projekt.C-c p o
:: Läuftmulti-occur
auf allen aktuell geöffneten Projektpuffern.Diese wirken sich nur auf Dateien aus, die als Teil des Projekts definiert sind (oder gefunden werden, wenn der Cache generiert / neu generiert wird).
quelle
Die
ag
projektweite Suche nur nach relevanten Dateien kann mit Hilfe von the_silver_searcher durchgeführt werden .Warum ag?
.gitignore
,.hgignore
,svn:ignore
. Sie können für Ihre Suche festlegen, dass die Ignorierliste NICHT in den Versionskontroll-Ignorierlisten verwendet wird, indem Sie den-U
Schalter verwenden..agignore
Datei hinzu..agignore
Datei kann in Ihre eingefügt werden,$HOME
und dann können Sie weitere projektspezifische.agignore
Dateien in Ihre Projektstammverzeichnisse einfügen.Einrichten
ag
und Emacsag
aka the_silver_searcher auf Ihrem System..agignore
Datei ein. Ich bevorzuge es, nur eine globale.agignore
Datei in meiner zu haben$HOME
.ag
Paket (verfügbar auf Melpa).wgrep-ag
Paket zu installieren (auch auf Melpa verfügbar). Das würde helfen, wenn Sie versuchen, projektweit zu suchen / ersetzenag
.ag-project
oderag-project-regexp
(die mit demag
Paket geliefert wird) verwenden, um projektweite Dateisuchen durchzuführen.ag-project-root-function
.ag-project
/ag-project-regexp
-basierte Suche markieren, indem Sie einen leeren.git
Ordner in Ihrem Projektstamm ablegen. Sie müssen dann nicht anpassenag-project-root-function
.quelle
Wenn Ihr Projekt Git verwendet, benötigen Sie nur
counsel
https://github.com/abo-abo/swipercounsel-git
Datei zu findencounsel-git-grep
zu greifenDie einzige Abhängigkeit ist Git
Text-Grepping ist schneller als der Silver Searcher (ag)
Counsel bietet auch andere leistungsstarke Tools. Zum Beispiel, nach dem Laufen
counsel-git-grep
, können Sie drückenC-c C-o
undC-x C-q
gehen inwgrep-mode
dem einfachen Text in dem Projektumfang zu ersetzen.In einem Artikel https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ werden Details erläutert. In diesem Artikel wird
counsel-ag
(ein weiterer in counsel integrierter Befehl)cousnel-git-grep
derselbe Arbeitsablauf verwendet.quelle
ag
ist auch ein grep programm, wiegit-grep
. Ich kann nicht sagen, was schneller ist. Siehe github.com/BurntSushi/ripgrep, in dem die Leistung beliebter grep-Programme (einschließlichag
undgit-grep
) verglichen wirdDie erste Antwort ist schön, lässt aber einige kritische Details über moderne Versionen von Emacs aus. Ich bin Emacs selbst bekannt, daher sind sich andere Neulinge möglicherweise dessen nicht bewusst. Wenn Sie das Ziel haben, INNERHALB einer Datei in einem PROJEKT nach Text zu suchen, installieren Sie Projectile zunächst über das MELPA-Repository.
Dadurch wird das Paket in .emacs.d installiert und .emacs in Ihrem $ USER-Verzeichnis wird eine Grundkonfiguration hinzugefügt (vorausgesetzt, Sie haben die .emacs-Datei erstellt), beispielsweise, dass Projectile in Ihrer Emacs-Installation erforderlich ist.
Sie müssen es jedoch noch aktivieren und Keymap-Präfixe zuordnen, damit Sie es im Minipuffer aufrufen können.
In der akzeptierten Antwort wird der folgende Befehl erwähnt:
Dies funktioniert nur, wenn Sie Projectile mit diesem Keymap-Präfix konfigurieren. Aber ich habe es so konfiguriert, dass Cc Cp als Befehl für Project in .emacs verwendet wird:
Nun kann ich mit grep eine Textsuche in Dateien in einem Projekt durchführen:
Um es zu zerlegen,
C-c C-p
wird Projectile aufgerufen unds g
die Grep-Suche durchgeführt. Sie erhalten eine schöne Ausgabe wie diese, vorausgesetzt, Ihre Suche istvisit_contact
und Sie suchen Rubys rspec in einem Projekt:quelle