Як grep у вихідному команді?


11

Як шукати шаблон у вихідному команді? Наприклад, як шукати шаблон імені файлу у висновку :scriptnamesкоманди? У довідці на всі смаки grepі vimgrepє лише {file}місце, де можна здійснити пошук.

Відповіді:


6

Ви можете зробити:

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

Що це робить:

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

12

:filterКоманда являє собою простий, однорядковий підхід до цього.

:filter /indent/ scriptnames

Показували б лише рядки, що відповідають шаблону indentз виводу :scriptnamesкоманди.


Я бачу - :redirорієнтовані рішення таких питань, які часто є прекрасними і пропонують багато енергії та варіантів, але я відчуваю, що вони трохи непосильні, коли частіше за все потрібно просто швидко перевірити, чи щось там є. :filterзручно використовувати в даний момент і мертве просте.


2
це чистіше і стисліше.
jdhao

Дійсно, це повинна бути прийнята відповідь. (Дізнався багато з відповіді edi9999, хоча, звідси і нагорода.)
toraritte

4

По-перше, вам потрібно схопити вихід scriptnamesі помістити його в буфер.

Ви можете використовувати :redirдля цього:

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

Однак це означає, :scriptnameщо надто довгий висновок для сканування власними очима може бути симптомом більш глибоких проблем.


Погодьтеся з вашим останнім реченням. Якщо вихід такий довгий, фільтрацію слід здійснювати безпосередньо з командного рядка, а не зсередини ex.
Wildcard

Вибачте, не бачите, що ви маєте на увазі надто довгий список. Наприклад, у цьому списку є синтастичний 10 файлів, 13 інших файлів і т. Д.
Аль Бергер,

2
Якщо у вас :scriptnamesбільше, ніж у Magna Carta, ви можете встановити сценарій Тіма Попа . Він надає функцію, :Scriptnamesяка розміщує всі ці сміття у списку швидких виправлень. Там ви можете шукати його до вмісту серця, зберігати його у файл або переходити до відповідних сценаріїв.
Сато Кацура

@AlBerger, занадто довгий список означає занадто багато плагінів та / або плагінів занадто великий або погано написаний. 13 файлів для одного плагіна - це занадто багато.
romainl

Ви припускаєте, що NERDTreeслід розмістити всі його функції в одному файлі, щоб зберегти :scriptnamesкороткий вихід ? Чи зробить це кращим написаним плагіном?
Сато Кацура
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.