Como grep na saída do comando ex?

10

Como alguém procura um padrão na saída do comando ex? Por exemplo, como procurar um padrão de nome de arquivo na saída do :scriptnamescomando? Na ajuda de todos os sabores grepe vimgrepexiste apenas {file}como um local para realizar a pesquisa.

Al Berger
fonte

Respostas:

6

Você poderia fazer :

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

O que faz :

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

O :filtercomando é uma abordagem simples e de uma linha para isso.

:filter /indent/ scriptnames

Mostraria apenas as linhas correspondentes ao padrão indentda saída do :scriptnamescomando.


Eu sempre vejo :redirsoluções orientadas para perguntas como essas, que são boas e oferecem muito poder e opções, mas acho que elas são um pouco exageradas quando, na maioria das vezes, você só precisa verificar rapidamente se há alguma coisa. :filteré conveniente usar no momento e simples.

ZeroKnight
fonte
1
isso é mais limpo e conciso.
jdhao
De fato, essa deve ser a resposta aceita. (Aprendi muito com a resposta de edi9999 embora, daí o upvote.)
toraritte
3

Primeiro, você precisa pegar a saída scriptnamese colocá-la em um buffer.

Você pode usar :redirpara isso:

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

Dito isto, uma :scriptnamesaída muito longa para ser digitalizada com seus próprios olhos pode ser um sintoma de problemas mais profundos.

romainl
fonte
Concorde com sua última frase. Se a saída for tão longa, a filtragem deve ser feita diretamente da linha de comando, não de dentro de ex.
Curinga
Desculpe, não veja o que você quer dizer com lista muito longa. Por exemplo syntastic tem nessa lista 10 arquivos, nerdtree outros 13 arquivos, etc.
Al Berger
2
Se sua saída :scriptnamesfor maior que a Magna Carta, você poderá instalar o scriptease de Tim Pope . Ele fornece uma função :Scriptnamesque coloca todo esse lixo em uma lista de correções rápidas. Lá, você pode pesquisar o conteúdo do seu coração, salvá-lo em um arquivo ou acessar os scripts correspondentes.
Sato Katsura
@AlBerger, uma lista muito longa significa muitos plugins e / ou plugins muito grandes ou mal escritos. 13 arquivos para um único plugin é demais.
Romainl # 21/15
Você está sugerindo que NERDTreedeve colocar todas as suas funções em um único arquivo, a fim de manter a saída :scriptnamescurta? Isso tornaria um plugin melhor escrito?
Sato Katsura