Jak grep w wyjściu polecenia ex?

11

Jak szukać wzorca w danych wyjściowych polecenia ex? Na przykład, jak wyszukać wzorzec nazwy pliku w danych wyjściowych :scriptnamespolecenia? W pomocy dla wszystkich smaków grepi vimgrepjest tylko {file}jako miejsce, w którym można przeprowadzić wyszukiwanie.

Al Berger
źródło

Odpowiedzi:

6

Mógłbyś:

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

Co to robi:

: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
źródło
12

:filterKomenda jest podejście prosta, jedna linia do tego.

:filter /indent/ scriptnames

Wyświetla tylko wiersze pasujące do wzorca indentz danych wyjściowych :scriptnamespolecenia.


:redirCzęsto widzę zorientowane na takie rozwiązania pytania, które są w porządku i oferują dużą moc i opcje, ale czuję, że są nieco przesadzone, gdy częściej niż nie, musisz tylko szybko sprawdzić, czy coś tam jest. :filterjest wygodny w użyciu w tej chwili i bardzo prosty.

ZeroKnight
źródło
2
to jest czystsze i bardziej zwięzłe.
jdhao
Rzeczywiście, powinna to być zaakceptowana odpowiedź. (Wiele się nauczyłem z odpowiedzi edi9999, stąd opinia).
toraritte
4

Najpierw musisz pobrać wynik scriptnamesi umieścić go w buforze.

Możesz użyć :redirdo tego:

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

To powiedziawszy, :scriptnamewyjście, które jest zbyt długie, aby można je zeskanować na własne oczy, może być objawem głębszych problemów.

romainl
źródło
Zgadzam się z ostatnim zdaniem. Jeśli wynik jest tak długi, filtrowanie należy wykonać bezpośrednio z wiersza polecenia, a nie z poziomu np.
Wildcard
Niestety, nie rozumiem, co masz na myśli o zbyt długiej liście. Np. Syntastic ma na tej liście 10 plików, nerdtree kolejne 13 plików itp.
Al Berger
2
Jeśli twoje wyjście :scriptnamesjest dłuższe niż Magna Carta, możesz rozważyć zainstalowanie skryptu Tima Pope'a . Zapewnia funkcję, :Scriptnamesktóra umieszcza wszystkie te śmieci na liście szybkich poprawek. Możesz tam przeszukać zawartość swojego serca, zapisać ją w pliku lub przejść do odpowiednich skryptów.
Sato Katsura
@AlBerger, zbyt długa lista oznacza zbyt wiele wtyczek i / lub wtyczek za dużych lub źle napisanych. 13 plików dla jednej wtyczki to zdecydowanie za dużo.
romainl
Czy sugerujesz, NERDTreeaby wszystkie jego funkcje umieścić w jednym pliku, aby skrócić wynik :scriptnames? Czy dzięki temu byłaby to lepiej napisana wtyczka?
Sato Katsura