Comment grep dans la sortie de la commande ex?

10

Comment rechercher un modèle dans la sortie d'une commande ex? Par exemple, comment rechercher un modèle de nom de fichier dans la sortie de la :scriptnamescommande? Dans l'aide pour toutes les saveurs de grepet vimgrepil n'y a qu'un {file}endroit où effectuer une recherche.

Al Berger
la source

Réponses:

6

Vous pourriez faire :

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

Ce qu'il fait :

: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`

edi9999
la source
8

La :filtercommande est une approche simple et en une seule ligne pour cela.

:filter /indent/ scriptnames

N'afficherait que les lignes correspondant au modèle indentde la sortie de la :scriptnamescommande.


Je vois :redirsouvent des solutions orientées à des questions comme celles-ci, qui sont très bien et offrent beaucoup de puissance et d'options, mais je pense qu'elles sont un peu exagérées lorsque le plus souvent, il vous suffit de vérifier rapidement si quelque chose est là. :filterest pratique à utiliser dans le moment et très simple.

ZeroKnight
la source
1
c'est plus propre et plus concis.
jdhao
En effet, cela devrait être la réponse acceptée. (Beaucoup appris de la réponse d'edi9999, d'où le vote positif.)
toraritte
3

Tout d'abord, vous devez saisir la sortie de scriptnameset la mettre dans un tampon.

Vous pouvez utiliser :redirpour cela:

: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'

Cela dit, une :scriptnamesortie trop longue pour être scannée de vos propres yeux peut être le symptôme de problèmes plus profonds.

romainl
la source
D'accord avec ta dernière phrase. Si la sortie est aussi longue, le filtrage doit être effectué directement à partir de la ligne de commande, pas à partir d'ex.
Wildcard
Désolé, ne voyez pas ce que vous entendez par liste trop longue. Par exemple, syntastic a dans cette liste 10 fichiers, nerdtree 13 autres fichiers, etc.
Al Berger
2
Si la sortie de votre :scriptnamesest plus longue que Magna Carta, vous pourriez envisager d'installer le scriptease de Tim Pope . Il fournit une fonction :Scriptnamesqui met toutes ces ordures dans une liste de correctifs. Là, vous pouvez le rechercher selon le contenu de votre cœur, l'enregistrer dans un fichier ou accéder aux scripts correspondants.
Sato Katsura
@AlBerger, une liste trop longue signifie trop de plugins et / ou plugins trop volumineux ou mal écrits. 13 fichiers pour un seul plugin, c'est beaucoup trop.
romainl
Suggérez-vous que NERDTreedevrait mettre toutes ses fonctions dans un seul fichier, afin de garder la sortie de :scriptnamescourt? Serait-ce un meilleur plugin écrit?
Sato Katsura