Как grep в вывод команды ex?

10

Как искать шаблон в выводе команды ex? Например, как искать шаблон имени файла в выводе :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`

edi9999
источник
8

Команда :filterпредставляет собой простой, однострочный подход к этому.

:filter /indent/ scriptnames

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


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

ZeroKnight
источник
1
это чище и более кратко.
19
Действительно, это должен быть принятый ответ. (Тем не менее, многое узнал из ответа edi9999, отсюда и upvote.)
toraritte
3

Во-первых, вам нужно получить выходные данные 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вывод, который слишком длинный для сканирования своими глазами, может быть признаком более глубоких проблем.

romainl
источник
Согласитесь с вашим последним предложением. Если вывод такой длинный, фильтрация должна выполняться непосредственно из командной строки, а не из ex.
Подстановочный
Извините, не понимаю, что вы имеете в виду из-за слишком длинного списка. Например, у Синтетика в этом списке 10 файлов, у Nerdtree еще 13 файлов и т. Д.
Аль Бергер
2
Если ваша продукция :scriptnamesдлиннее, чем Великая хартия вольностей, вы можете рассмотреть возможность установки сценария Тима Попа . Он предоставляет функцию, :Scriptnamesкоторая помещает весь этот мусор в список быстрых исправлений. Там вы можете найти его по своему усмотрению, сохранить его в файл или перейти к соответствующим сценариям.
Сато Кацура
@AlBerger, слишком длинный список означает, что слишком много плагинов и / или плагинов слишком велико или плохо написано. 13 файлов для одного плагина - это слишком много.
Ромен
Вы предлагаете, NERDTreeчтобы все функции были помещены в один файл, чтобы вывод был :scriptnamesкоротким? Это сделало бы это лучше написанным плагином?
Сато Кацура