:scriptnames
命令的输出中搜索文件名模式?在对grep
和vimgrep
的所有样式的帮助中,只有{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
瞬间使用起来非常方便。#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
评论
这更干净,更简洁。
– 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