如何在ex命令输出中grep?


10

如何在ex命令输出中搜索模式?例如,如何在:scriptnames命令输出中搜索文件名模式?在帮助的所有口味grepvimgrep只有{file}在何处进行搜索的地方。

Answers:


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`


8

:filter命令是一种简单的单行方法。

:filter /indent/ scriptnames

显示indent:scriptnames命令输出中的模式匹配的行。


:redir经常看到针对此类问题的面向解决方案,这些解决方案很好,并且提供了很多功能和选项,但我觉得它们在大多数情况下有点过大,您只需要快速检查是否有问题即可。:filter方便使用,一生简单。


1
这样更简洁。
jdhao

确实,这应该是公认的答案。(不过,从edi9999的答案中学到了很多,因此得到了
好评

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输出时间太长而无法用自己的眼睛进行扫描,这可能是更深层问题的征兆。


同意你的最后一句话。如果输出那么长,则应直接从命令行而不是从ex内部进行过滤。
2015年

抱歉,看不到太长的意思。例如syntastic在该列表中的10个文件,nerdtree另外13个文件,等等
铝贝格

2
如果您的输出:scriptnames比Magna Carta长,则可以考虑安装Tim Pope的scriptease。它提供了:Scriptnames将所有垃圾放入快速修复列表的功能。在这里,您可以根据自己的需求搜索内容,将其保存到文件中,或者转到相应的脚本。
佐藤桂2015年

@AlBerger,列表太长意味着太多的插件和/或太大或写得不好的插件。一个插件的13个文件太多了。
romainl

您是否建议NERDTree将其所有功能放在一个文件中,以使输出:scriptnames简短?这会使它成为一个更好的书面插件吗?
佐藤桂2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.