Wie kann ich in emacs in Windows nach "Schlüsselwort in Dateien suchen" ohne cygwin suchen?

3

Ich möchte nach Schlüsselwörtern in einem Stapel von Dateien in meinem Windows-PC mit Emacs suchen.

Das liegt zum Teil daran, dass ich fortgeschrittenere Funktionen von Emacs erlernen möchte. Dies liegt auch daran, dass der Windows-PC durch Unternehmensrichtlinien gesperrt ist. Ich kann keine nützlichen Anwendungen wie cygwin nach Belieben installieren.

Also habe ich diesen Befehl ausprobiert: M-x rgrep

Es wird die folgende Fehlermeldung ausgegeben:

*- mode: grep; default-directory: "c:/Users/me/Desktop/Project" -*-
Grep started at Wed Oct 16 18:37:43

find . -type d "(" -path "*/SCCS" -o -path "*/RCS" -o -path "*/CVS" -o -path "*/MCVS" -o -path "*/.svn" -o -path "*/.git" -o -path "*/.hg" -o -path "*/.bzr" -o -path "*/_MTN" -o -path "*/_darcs" -o -path "*/{arch}" ")" -prune -o "(" -name ".#*" -o -name "*.o" -o -name "*~" -o -name "*.bin" -o -name "*.bak" -o -name "*.obj" -o -name "*.map" -o -name "*.ico" -o -name "*.pif" -o -name "*.lnk" -o -name "*.a" -o -name "*.ln" -o -name "*.blg" -o -name "*.bbl" -o -name "*.dll" -o -name "*.drv" -o -name "*.vxd" -o -name "*.386" -o -name "*.elc" -o -name "*.lof" -o -name "*.glo" -o -name "*.idx" -o -name "*.lot" -o -name "*.fmt" -o -name "*.tfm" -o -name "*.class" -o -name "*.fas" -o -name "*.lib" -o -name "*.mem" -o -name "*.x86f" -o -name "*.sparcf" -o -name "*.dfsl" -o -name "*.pfsl" -o -name "*.d64fsl" -o -name "*.p64fsl" -o -name "*.lx64fsl" -o -name "*.lx32fsl" -o -name "*.dx64fsl" -o -name "*.dx32fsl" -o -name "*.fx64fsl" -o -name "*.fx32fsl" -o -name "*.sx64fsl" -o -name "*.sx32fsl" -o -name "*.wx64fsl" -o -name "*.wx32fsl" -o -name "*.fasl" -o -name "*.ufsl" -o -name "*.fsl" -o -name "*.dxl" -o -name "*.lo" -o -name "*.la" -o -name "*.gmo" -o -name "*.mo" -o -name "*.toc" -o -name "*.aux" -o -name "*.cp" -o -name "*.fn" -o -name "*.ky" -o -name "*.pg" -o -name "*.tp" -o -name "*.vr" -o -name "*.cps" -o -name "*.fns" -o -name "*.kys" -o -name "*.pgs" -o -name "*.tps" -o -name "*.vrs" -o -name "*.pyc" -o -name "*.pyo" ")" -prune -o  -type f "(" -iname "*.sh" ")" -exec grep -i -n "action" {} NUL ";"
FIND: Parameter format not correct

Grep exited abnormally with code 2 at Wed Oct 16 18:37:44

Ich glaube rgrep hat versucht, einen Prozess zu erzeugen und rief mit allen Parametern 'FIND' auf. Da es sich jedoch um Windows handelt, ist dies die Standardeinstellung Find Die ausführbare Datei weiß einfach nicht, wie sie damit umgehen soll.

Wie kann ich in Emacs auf Windows-Plattformen in mehreren Dateien nach einem Schlüsselwort suchen, ohne von externen Programmen abhängig zu sein?

Emacs-Version: 24.2.1

Anthony Kong
quelle

Antworten:

2
  1. Wenn du benutzt Dired + und Eiszapfen Sie können dann alle markierten Dateien in einem Dired-Puffer durchsuchen, einschließlich der Dateien, die in markierten Unterverzeichnissen usw. markiert sind, rekursiv.

    Eiszapfen-Suche ist eine andere Art der inkrementellen Suche. Du definierst Suchkontexte , welche Teile Ihres Textes durchsucht werden sollen. Sie definieren die Kontexte, indem Sie einen entsprechenden Ausdruck angeben. In einem einfachen Fall von rgrep Bei den Kontexten handelt es sich wie beim Verhalten nur um einzelne Textzeilen, und der kontextbestimmende Regex ist also .* (Nichts anderes als ein Newline-Zeichen).

    Hier ist ein Überblick über Eiszapfen suchen (und ersetzen) Verhalten.

    Wenn Sie sowohl Icicles als auch Dired + geladen haben, ist der Befehl zum Durchsuchen aller markierten Dateien in und unter dem aktuellen Dired-Puffer aktiv M-s M-s m, und es befindet sich in der Menüleiste des Dired-Modus als Multiple > Marked Here and Below > Icicles >Icicles Search (and Replace).

  2. Wenn du benutzt nur Dired + und auch nicht Eiszapfen können Sie weiterhin alle Dateien, die im aktuellen Dired-Verzeichnis und in allen Unterverzeichnissen (rekursiv) markiert sind, inkrementell durchsuchen. In diesem Fall wird bei der Suche das normale Emacs Isearch verwendet. Im Dired-Modus sind die Tasten dafür M-+ M-s a C-s (String-Suche, Befehl diredp-do-isearch-recursive ) und M-+ M-s a C-M-s (Regex-Suche, Befehl diredp-do-isearch-regexp-recursive ). Es gibt auch die nicht inkrementelle Version, den Befehl diredp-do-search-recursive, an das gebunden ist M-+ A. (Es gibt auch Tasten / Befehle zum Abfragen der markierten Dateien in und unterhalb des aktuellen Dired-Verzeichnisses.)

  3. Wenn Sie haben Dired + und Eiszapfen Sie möchten nur herausfinden, welche Datei eines bestimmten Dateisatzes ein bestimmtes Schlüsselwort enthält. Das heißt, Sie suchen nicht nach Vorkommen dieses Schlüsselworts, sondern möchten nur wissen, ob es vorhanden ist. Dann können Sie es verwenden M-+ C-F (Befehl icicle-visit-marked-file-of-content-recursive, Speisekarte Multiple > Marked Here and Below > Icicles > Open File of Content ).

  4. Ein abschließendes Wort zum Umgang mit Dateien, die mit "hier und unten" gekennzeichnet sind: Sie können ein Unterverzeichnis und keine Dateien markieren, um dieselbe Wirkung zu erzielen wie das Markieren der einzelnen Dateien. Sehen Dired + Für mehr Information.

Drew
quelle
1

Öffnen Sie das Verzeichnis, in dem Sie suchen möchten dired-mode. Markieren Sie dann alle Dateien, die Sie durchsuchen möchten, und führen Sie sie schließlich aus M-x dired-do-search RET keyword RET.

Dadurch werden die markierten Dateien nach dem durchsucht keyword.

Dror
quelle
Ja, es beantwortet die Frage. Das einzige, was es nicht tut, ist das rekursive Durchsuchen von Dateien in Unterverzeichnissen und Unterverzeichnissen usw. Ja, rgrep Durchsucht solche untergeordneten Verzeichnisse, aber die Antwort von @ Dror reagiert auf die OP-Anforderung, eine "Menge von Dateien" zu suchen: A ( dired-do-search ) ist eine gute Antwort. Eine noch bessere Antwort ist in dieser Hinsicht M-s a C-s ( dired-do-isearch ).
Drew
Sie könnten auch schlagen i Wenn sich der Punkt in einem Unterverzeichnis befindet, wird dies zur Liste in demselben Puffer.
Dror