Come grep nell'output del comando ex?


10

Come si cerca uno schema nell'output del comando ex? Ad esempio, come cercare un modello di nome file nell'output del :scriptnamescomando? In aiuto di tutti i gusti grepe vimgrepc'è solo {file}un posto dove eseguire la ricerca.

Risposte:


6

Potresti fare:

:redir => scriptn | sil exe 'scriptnames' | redir end | echo(system('grep pattern',scriptn))

Cosa fa :

:redir => scriptn "redirect following output to variable scriptn :sil exe 'scriptnames' "silently execute scriptnames :redir end "end the redirection :echo(system('grep pattern',scriptn)) "echo the call of grep witht that input with the pattern `pattern`


8

Il :filtercomando è un semplice approccio a una riga a questo.

:filter /indent/ scriptnames

Mostrerebbe solo le linee corrispondenti allo schema indentdall'output del :scriptnamescomando.


Vedo :redirspesso soluzioni orientate a domande come queste, che vanno bene e offrono molta potenza e opzioni, ma sento che sono un po 'eccessive quando più spesso, devi solo verificare rapidamente se c'è qualcosa. :filterè comodo da usare nel momento e morto semplice.


1
questo è più pulito e più conciso.
jdhao,

In effetti, questa dovrebbe essere la risposta accettata. (Ho imparato molto dalla risposta di edi9999, quindi l'upgrade.)
Toraritte,

3

Innanzitutto, devi prendere l'output di scriptnamese inserirlo in un buffer.

Puoi usare :redirper quello:

:redir @a       " redirect output of following ex commands to register a
:scriptnames    " press G to get to the end of the output if it's too long
:redir END      " end the redirection
:vnew           " new buffer in vertical window
:put a          " put content of register
/pattern        " search for 'pattern'

Detto questo, un :scriptnameoutput troppo lungo per essere scansionato con i tuoi occhi potrebbe essere un sintomo di problemi più profondi.


Accetto la tua ultima frase. Se l'output è così lungo, il filtro dovrebbe essere fatto direttamente dalla riga di comando, non dall'interno di ex.
Wildcard il

Spiacenti, non capisci cosa intendi per elenco troppo lungo. Ad esempio sintetico ha in quella lista 10 file, nerdtree altri 13 file, ecc.
Al Berger,

2
Se l'output del tuo :scriptnamesè più lungo di Magna Carta, potresti prendere in considerazione l'installazione dello scriptease di Tim Pope . Fornisce una funzione :Scriptnamesche mette tutta quella spazzatura in un elenco di soluzioni rapide. Lì puoi cercarlo nel contenuto del tuo cuore, salvarlo in un file o andare agli script corrispondenti.
Sato Katsura,

@AlBerger, un elenco troppo lungo significa troppi plugin e / o plugin troppo grandi o scritti male. 13 file per un singolo plugin sono troppo.
romainl

Stai suggerendo che NERDTreedovrebbe mettere tutte le sue funzioni in un singolo file, al fine di mantenere l'output di :scriptnamesbreve? Lo renderebbe un plugin scritto meglio?
Sato Katsura,
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.