Come fare "ricerca per parola chiave nei file" in emacs in Windows senza Cygwin?


3

Voglio cercare una parola chiave, dice "azione", in un mucchio di file nel mio PC Windows con Emacs.

In parte è perché voglio imparare funzionalità più avanzate di emacs. È anche perché il PC Windows è bloccato dalla politica aziendale. Non posso installare applicazioni utili come Cygwin a piacimento.

Quindi ho provato questo comando: M-x rgrep

Genera il seguente messaggio di errore:

*- 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

Credo che abbia rgreptentato di accelerare un processo e chiamato "TROVA" con tutti i parametri. Tuttavia, poiché si tratta di Windows, l' Findeseguibile predefinito semplicemente non sa come gestirlo.

Qual è il modo migliore per cercare una parola chiave in più file in Emacs su piattaforma Windows, senza alcuna dipendenza da programmi esterni?

Versione Emacs: 24.2.1

Risposte:


2
  1. Se usi Dired + e Icicles , puoi cercare tutti i file contrassegnati in un buffer Dired, inclusi i file contrassegnati in sottodir, e così via, in modo ricorsivo.

    La ricerca di ghiaccioli è un diverso tipo di ricerca incrementale. Definisci i contesti di ricerca , che sono le parti del tuo testo da cercare. Definisci i contesti fornendo una regexp che corrispondono. In un semplice caso di rgrepcomportamento simile, i contesti sono solo singole righe di testo, e quindi la regexp che definisce il contesto .*(corrisponde a qualsiasi cosa tranne un carattere di nuova riga).

    Ecco una panoramica delcomportamentodiricerca (e sostituzione)diIcicles.

    Se hai caricato sia Icicles sia Dired +, allora il comando per cercare tutti i file contrassegnati dentro e sotto il buffer Dired corrente è sul tasto M-s M-s m, ed è nella barra dei menu della modalità Dired come Multiple > Marked Here and Below > Icicles >Icicles Search (and Replace).

  2. Se usi solo Dired + e non anche Icicles , puoi comunque cercare in modo incrementale tutti i file contrassegnati nella directory Dired corrente e in tutte le sottodirectory (ricorsivamente). In questo caso, la ricerca utilizza Emacs Isearch ordinario. In modalità Dired, le chiavi per questo sono M-+ M-s a C-s(ricerca stringa, comando diredp-do-isearch-recursive) e M-+ M-s a C-M-s(ricerca regexp, comando diredp-do-isearch-regexp-recursive). Esiste anche la versione non incrementale, comando diredp-do-search-recursive, a cui è associato M-+ A. (Esistono anche chiavi / comandi per la query che sostituisce i file contrassegnati dentro e sotto la directory Dired corrente.)

  3. Se hai Dired + e Icicles e sei interessato solo a scoprire quale di un determinato set di file contiene una determinata parola chiave, cioè non stai cercando occorrenze di quella parola chiave ma vuoi solo sapere se è presente, allora puoi usare M-+ C-F(comando icicle-visit-marked-file-of-content-recursive, menu Multiple > Marked Here and Below > Icicles > Open File of Content).

  4. Un'ultima parola sulla gestione dei file contrassegnati "qui e sotto": è possibile contrassegnare una sottodirectory e non contrassegnare nessuno dei suoi file, per avere lo stesso effetto di contrassegnare ciascuno dei suoi file. Vedi Dired + per maggiori informazioni.


1

Apri la directory in cui vuoi cercare dired-mode. Quindi contrassegnare tutti i file che si desidera cercare e infine fare M-x dired-do-search RET keyword RET.

Ciò cercherà i file contrassegnati per keyword.


Sì, risponde alla domanda. L'unica cosa che non fa è ricorrere ai file nelle sottodirectory e nelle sottodirectory, ecc. In modo ricorsivo. Sì, rgrepcerca tali directory discendenti, ma la risposta di @ Dror risponde alla richiesta OP di cercare un "gruppo di file": A( dired-do-search) è una buona risposta. Una risposta ancora migliore, sulla stessa linea, è M-s a C-s( dired-do-isearch).
Drew

Potresti anche colpire iquando il punto si trova in una sottodirectory, e questo passerà all'elenco nello stesso buffer.
Dror
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.