Grep ricorsivo nella directory con timone e / o proiettile?


11

Un grep ricorsivo in una directory dovrebbe essere la cosa più semplice, ma non ho ancora trovato la ricetta per farlo funzionare. Sto giocando tra i seguenti comandi e non sono sicuro di quale funzionalità sia nascosta al suo interno:

  • helm-find-files: Il problema è che questo è davvero un problema nel trovare ricorsivamente una directory.
  • projectile-find-dir: Questo è fantastico nel trovare la directory! Tuttavia, nonostante si usi helm complete, C-u C-snon si finisce in modalità helm, quindi il comando non funziona qui.
  • helm-find: ottiene la ricorsione corretta ma ha come target i file, non le directory
  • helm-projectile-find-dir: Sembra essere quello che voglio.

1
Adoro ag e ag-mode per questo, il cercatore d'argento batte grep con una mano legata alla schiena :-), non so come renderlo proiettile consapevole, però
Tom Regner,

Mx projectile-ag forse? («Prefisso-proiettile» A o «prefisso-proiettile» a - a seconda della versione)
Mekk

2
Per il poster originale: non capisco bene quale sia il tuo scopo. projectile-ack e projectile-ag sono entrambi grandi greggi ricorsivi all'interno di (intero) progetto proiettile. Non sono quello che ti serve?
Mekk,

Risposte:


10

Hai due modi:

  • Usa helm-projectile-grep/ack/ag: Puoi cercare tutto a partire dalla radice del progetto. Successivamente, se si desidera salvare i risultati della ricerca, premere F3o premere TABper passare al menu azioni e selezionare la terza azione. Per navigare nel hgrepbuffer:

    • C-<down>: vai alla prossima partita e apri la partita.
    • C-<up>: vai alla partita precedente e apri la partita.
    • M-<down>: vai alla prossima partita senza aprire la partita.
    • M-<up>: vai alla prossima partita senza aprire la partita.
    • C-o: apre la partita corrente in un'altra finestra.
    • RET: apre la corrispondenza corrente nella finestra corrente.
  • Usa helm-projectile-find-dir(nota il helmprefisso; devi usare i comandi Helm appropriati dal helm-projectilepacchetto in generale): restringi alla directory desiderata e premi C-u C-sper cercare ricorsivamente in quella directory. Se non premi C-u, cerca semplicemente in quella directory senza andare più a fondo.

Spero che aiuti.


1
Mi hai appena permesso di sbloccare un enorme guadagno informandomi di questa azione "TAB" all'interno di un risultato di ricerca proiettile. Grazie. Grazie Signore.
emish,

5

Un grep ricorsivo in una directory dovrebbe essere la cosa più semplice

Per un semplice grep ricorsivo all'interno directory corrente, basta: M-x grepquindi, all'interno del minibuffer: Run grep (like this): grep -nHr "pattern". (nota la bandiera -r).

Potresti essere interessato anche a rgrep:

rgrep è una funzione Lisp compilata interattiva caricata automaticamente in
`grep.el '.

(rgrep REGEXP e CONFERMA DIR. FILES opzionale)

Grep ricorsivo per REGEXP in FILES nella struttura di directory radicata in DIR. La ricerca è limitata ai nomi di file corrispondenti a FILES della shell. FILES può usare le abbreviazioni definite in grep-files-aliases', e.g. enteringch 'è equivalente a `*. [Ch]'.


Ciò non è collegato al proiettile che dovrebbe essere nel contesto.
RichieHH il

2

Oltre agli strumenti citati nelle altre risposte, un'altra funzione interessante è quella di find-grep-diredcreare un diredbuffer contenente tutti i file corrispondenti a un modello grep ricorsivo.

Funziona find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lse visualizza i risultati in un diredbuffer.


1

Potresti provare helm-do-grep. Chiamarlo con un prefisso arg ti dà un grep ricorsivo, come spiegato nel Helm Wiki .

Se vuoi lanciare helm-do-grep in modo ricorsivo senza avviare helm-find-files, fai:

Cu helm-comando-prefisso-chiave Mg s

NOTA: se si dimentica di premere Cu prima di Mg, è possibile farlo dopo la selezione del file.

Ti verrà richiesto di selezionare in quale categoria di file cercare: utilizzare la sintassi di wilcard come * .el per esempio (cerca solo nei file .el).

Per impostazione predefinita, l'estensione del file nel punto viene utilizzata quando il cursore si trova su un nome file. Se il cursore si trova alla radice di una directory, tutte le estensioni di file trovate nella directory e che non corrispondono ai file grep-find-ignored-vengono inserite nel prompt.

Provalo così:

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


0

helm-projectile-find-dirè probabilmente la funzionalità corretta. Puoi

  1. Trova una directory come in projectile-find-dir
  2. Ma poi finisci in modalità Helm dove puoi correre C-u C-sper una ricerca ricorsiva come desiderato.

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.