如何在ex命令输出中搜索模式?例如,如何在:scriptnames命令的输出中搜索文件名模式?在对grepvimgrep的所有样式的帮助中,只有{file}作为执行搜索的地方。

#1 楼

您可以这样做:

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


#2 楼

:filter命令是一种简单的单行方法:
:filter /indent/ scriptnames

仅显示与indent命令输出中的模式:scriptnames匹配的行。
通常,:filter不存在'ignorecase''smartcase'都将始终以区分大小写的方式进行搜索。要覆盖此问题,请将\c放在您的搜索模式之前,例如:
:filter /\cindent/ scriptnames

有关更多信息,请参见:h \c

我经常看到针对此类问题的面向:redir的解决方案,可以提供很多功能和选项,但是我觉得它们在大多数情况下有点过大,您只需要快速检查是否有东西即可。 :filter瞬间使用起来非常方便。

评论


这更干净,更简洁。

– jdhao
19年4月10日在10:14

确实,这应该是公认的答案。 (尽管从edi9999的答案中学到了很多,所以赞成。)

–toraritte
19年6月27日在22:00

如何以不区分大小写的方式进行过滤?

– jdhao
20-09-22在11:41

@jdhao很好的问题!由于某些原因,filter不会像其他使用模式的命令那样观察'ignorecase'。但是,您可以通过在模式之前加上\ c来强制执行此操作,例如::filter / \ cindent /脚本名。另请参阅:h \ c。

–零骑士
20/09/22在19:56

@ZeroKnight感谢您的及时答复。我还发现\ c需要区分大小写。

– jdhao
20-09-23在2:05

#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年10月21日在10:10

抱歉,看不到太长的意思。例如。 syntastic在该列表中有10个文件,nerdtree还有13个文件,等等。

– Al Berger
2015年10月21日在12:52

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

–佐藤桂
15年10月21日在13:39

@AlBerger,列表太长表示插件太多和/或插件太大或编写不正确。一个插件的13个文件太多了。

– romainl
2015年10月21日14:21在

您是否建议NERDTree应该将其所有功能放在一个文件中,以使:scriptnames的输出简短?这会使它成为一个更好的书面插件吗?

–佐藤桂
2015年10月21日在15:31