Funzionalità simile a Grep per Notepad ++?


52

Vorrei avere alcune funzionalità simili a grep in Notepad ++.

Nella sua versione più semplice, vorrei essere in grado di copiare tutte le righe dal buffer corrente che contengono la parola fooin un nuovo buffer. Posso usare il plug-in TextFX per nascondere tutte le righe senza foo, ma ciò non fa tutto ciò che desidero (si perde su Alt- Tab, non riesco a copiare solo le righe corrispondenti, ecc.).

Risposte:


79

Ctrl+ F-> vai alla scheda Contrassegna -> attiva / disattiva la riga dei segnalibri -> fai clic su Seleziona tutto .

Selezionare il menu Cerca -> Segnalibro -> Copia righe segnalibro .


5
Bene grazie. Puoi "tagliare le linee dei segnalibri" anche per i poveri grep -v.
ARRG,

2
Nelle versioni successive, ad es. 5.4.5, non esiste alcuna scheda "Mark". Invece, c'è una casella di controllo, "Segna linea", nella scheda "Trova". E "Copia le righe stampate" si trova direttamente nel menu "Cerca".
Peter Mortensen,

@ARRG Non riesci a trovare le linee con segnalibro tagliate o Copia le linee con segnalibro nella versione corrente, dov'è?
Nicolas Thery,

Funzionando come Fascino :-)
Sundararaj Govindasamy

12

Stavo solo esaminando questa stessa domanda. Non sono sicuro che tu ne sia consapevole; nella finestra di dialogo Trova, puoi trovare Tutto nel documento corrente che farà apparire una finestra in basso che mostra le linee corrispondenti. Quindi puoi copiarlo in un nuovo documento.

Sfortunatamente, include alcune informazioni estranee nei risultati (numero di riga, ecc.), Ma puoi filtrarle usando la modalità colonna.


1
I numeri di riga aggiunti potrebbero anche essere una caratteristica :)
Frank Meulenaar,

2
Potresti trovare questo plugin utile code.google.com/p/searchplus
Amarghosh il

@Amarghosh Plugin bello, ma manca un po 'di ergonomia (perché pulsanti e nessuna scorciatoia da tastiera?). Bella cattura :)
Benj

@Benji Alt-Q lancerà il plugin. Anche se non ci sono tasti di scelta rapida nella finestra del plug-in, la navigazione delle schede di base è stata abilitata. Se c'è abbastanza interesse nel plugin, proverò ad aggiungere più funzionalità man mano che avrò del tempo. Grazie per il feedback :)
Amarghosh,

2

Un'altra ottima soluzione è usare il plugin NppExec per aggiungere un comando grep per Notepad ++.

Il vantaggio principale rispetto alla soluzione "Segnalibri" è che funziona molto più velocemente soprattutto per file di grandi dimensioni e non è necessario modificare il file originale. Nota che devi creare un piccolo script una volta per rendere disponibile questa funzione in Notepad ++.

Il mio esempio di soluzione è per Windows e utilizzo findstr , che è uno strumento di comando simile a grep disponibile su tutte le macchine Windows. Ma ovviamente puoi anche usare qualsiasi altro clone grep di tua scelta.

Passaggio 1: installa il plug-in NppExec

Vai a Plugins / Plugin Manager / Show Plugin Manager, scorri verso il basso fino a NppExec, seleziona questo plugin e fai clic su Installa. Potrebbe essere necessario riavviare Notepad ++ per completare il processo di installazione.

Passaggio 2: creare un piccolo script per NppExec

Vai a Plugins / NppExec / Execute, inserisci il seguente script e salvalo come "grep":

SET local OUTFILE = "c:\temp\$(FILE_NAME).temp"
INPUTBOX "Input filter string"
cmd /c findstr $(INPUT) "$(FULL_CURRENT_PATH)" >$(OUTFILE)
NPP_OPEN $(OUTFILE)

(ricontrolla se il percorso di OUTFILE funziona per il tuo ambiente)

Passaggio 3: aggiungi una voce di menu per lo script (facoltativo)

Vai a Plugins / NppExec / Advanced Options, seleziona lo script "grep" sotto Associated scripte fai clic su OK per salvare. Riavvia Blocco note come richiesto da NppExec per completare l'aggiunta della nuova voce di menu.

Passaggio 4: aggiungi un collegamento per lo script (facoltativo)

Vai a Settings / Shortcut Mapper / Plugin commands, scorri verso il basso per trovare il comando di script "grep" e definisci un collegamento per esso. per esempioALT-G


Prima di tutto, grazie per l'ottima risposta che è stata in attesa di essere votata per anni ... :-) Pensavo di avere dei problemi con la sceneggiatura, non ha funzionato. Poi ho notato che dovremmo adattare i percorsi, ecc., Ma non l'hai menzionato esplicitamente, quindi ho incollato alla cieca! Lavoro così in fretta che mi rallenta: -)
pgr

Grazie tante per il feedback. Lo aggiungerò alla mia risposta.
Erik Kalkoken,

Un'altra piccola nota: $(FULL_CURRENT_PATH)non restituirà alcun percorso se il file non è stato ancora salvato. Potresti aspettarti che risieda da qualche parte (directory temp?), Ma non proprio. Questa situazione di file non salvati potrebbe essere abbastanza comune, basta incollare qualcosa da un registro per grep ... potremmo perfezionare questo script per salvare il file se non è stato ancora salvato - ma per semplicità mi ricordo solo di salvare manualmente prima del grepping. Grazie.
pag

Funziona se la stringa di ricerca contiene spazi? o altri personaggi speciali?
G-Man dice 'Reinstate Monica' il

Sì, che funziona
Erik Kalkoken,

-1

Passaggio 5: creare uno script per il salvataggio rapido e il documento grep

Vai su Plugins / NppExec / Execute, inserisci il seguente script e salvalo come "grep":

SET local AUTOSAVEFILE = "% tmp% \ NpPPautosave.tmp"
SET local OUTFILE = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "Stringa di input per GREP"
cmd / c findstr $ (INPUT ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)


Dov'è il passaggio 1, 2, 3 e 4?
Pierre.Vriens,

(1) Preferiamo, per quanto possibile, che le risposte siano indipendenti. Sembra che ci sia (almeno) un passo che deve essere fatto prima che qualcuno possa usare la tua risposta (suggerimento: passo 1); per favore includilo nella tua risposta. (2) Sembra fortemente che la tua risposta sia in piedi sulla spalla di Erik Kalkoken . Se hai intenzione di farlo, dovresti dirlo esplicitamente. ... (proseguendo)
G-Man dice "Reinstata Monica" il

(Proseguendo) ... (3) La tua risposta è migliore di quella di Erik? In tal caso, spiega come e perché. (In effetti, sarebbe bello se tu spiegassi cosa fa la risposta e come usarla.) In caso contrario, perché l'hai pubblicata? (4) Credi che sia in qualche modo superiore usare un nome di file di output hardcoded piuttosto che uno che si basa sul nome di file corrente? (5) Esistono dei vantaggi nell'esecuzione findstrsul file di salvataggio automatico anziché sul file corrente? (6) Perché la tua risposta usa sia C:\temp e C:\tmp? ... ... Per favore non rispondere nei commenti; modifica la tua risposta per renderla più chiara e completa.
G-Man dice 'Reinstate Monica' il

(1) "un passo che deve essere fatto prima di qualcuno" - tutti gli Erik passano da 1 a 4. (2) Devi avere 50 reputazione per commentare. (per commentare il post di Erik) (3) Sì, la mia risposta è leggermente migliore, perché la risposta di Erik non funziona prima che il documento fosse salvato sul disco fisso. Non voglio salvare il file temporaneo solo per grep. "cosa fa la risposta e come usarla" - il mio codice salva semplicemente il testo aperto in notepad ++ in un file temporaneo in hdd. Questa è la riga "NPP_SAVEAS" che salva automaticamente il testo su HDD. (4) No! non esattamente. (5) Sì! Il core di Erik non funziona, prima di salvare sul disco rigido, guarda la mia (3) risposta.
Kasumiru,

(6) Sory, avevo fretta e sbaglio, le mie finestre cygwin hanno dir tmp e temp. "Per favore, non rispondere nei commenti" - sory, ma ho scritto la mia risposta prima di leggere questo commento
Kasumiru,
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.