¿Cómo grep en la salida del comando ex?

10

¿Cómo se busca un patrón en la salida del comando ex? Por ejemplo, ¿cómo buscar un patrón de nombre de archivo en la salida del :scriptnamescomando? En la ayuda para todos los sabores de grepy vimgrepsolo hay {file}un lugar donde realizar la búsqueda.

Al Berger
fuente

Respuestas:

6

Podrías hacerlo :

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

Que hace :

: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
fuente
8

El :filtercomando es un enfoque simple de una línea para esto.

:filter /indent/ scriptnames

Solo mostraría líneas que coincidan con el patrón indentde la salida del :scriptnamescomando.


Veo :redirsoluciones orientadas a preguntas como estas a menudo, que están bien y ofrecen mucha potencia y opciones, pero siento que son un poco exageradas cuando la mayoría de las veces, solo necesita verificar rápidamente si hay algo allí. :filterEs conveniente de usar en el momento y muy simple.

ZeroKnight
fuente
1
Esto es más limpio y más conciso.
jdhao
De hecho, esta debería ser la respuesta aceptada. (Aprendido mucho de la respuesta de edi9999 sin embargo, de ahí el upvote.)
toraritte
3

Primero, necesitas tomar la salida scriptnamesy ponerla en un búfer.

Puedes usar :redirpara eso:

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

Dicho esto, un :scriptnameresultado que es demasiado largo para escanearse con sus propios ojos puede ser un síntoma de problemas más profundos.

romainl
fuente
De acuerdo con tu última oración. Si la salida es tan larga, el filtrado se debe hacer directamente desde la línea de comando, no desde ex.
Comodín el
Lo siento, no veo a qué te refieres con una lista demasiado larga. Por ejemplo syntastic tiene en esa lista de 10 archivos, nerdtree otros 13 archivos, etc.
Al Berger
2
Si la salida de tu :scriptnameses más larga que Magna Carta, podrías considerar instalar el guión de Tim Pope . Proporciona una función :Scriptnamesque pone toda esa basura en una lista de soluciones rápidas. Allí puede buscarlo al contenido de su corazón, guardarlo en un archivo o ir a los scripts correspondientes.
Sato Katsura
@AlBerger, una lista demasiado larga significa demasiados complementos y / o complementos demasiado grandes o mal escritos. 13 archivos para un solo complemento es demasiado.
romainl
¿Está sugiriendo que NERDTreedebería poner todas sus funciones en un solo archivo, para mantener la salida de :scriptnamescorto? ¿Eso lo convertiría en un complemento mejor escrito?
Sato Katsura