所以我正在开发一个包含多种资源的项目:XML,javascript,QML,图像,3D场景。 我经常想在项目中搜索模式。使用vimgrep / mypattern / j **非常长,特别是因为它在二进制文件中搜索。 我可以用
:vimgrep /mypattern/j *.xml
:vimgrepadd /mypattern/j *.js
但我更愿意在一个命令中完成。
另一种看待它的方法:如何防止vimgrep在二进制文件中搜索?
答案 0 :(得分:14)
您可以将多个文件整数传递给:vimgrep
:
:vimgrep /mypattern/j *.xml *.js
要排除某些文件,您可以配置'wildignore'
选项以排除它们,例如
:set wildignore=*.dll,*.exe
答案 1 :(得分:0)
您可以使用vim
,find
和grep
的组合来执行非常复杂的搜索。这是一个例子:
:vim /pattern/g `find ~ \( -type f -regextype posix-extended -regex '.*js' -exec grep -lI '.*' {} \;`
find ~ \( -type f -regextype posix-extended -regex '.*js'
这使您可以定义开始目录以开始搜索,然后在要搜索的文件名或日期上定义模式。
-type f
:定义您应该只查找文件
-regextype posix-extended -regex '.*js'
:定义您应该搜索与模式.*js
匹配的文件名。
-exec grep -lI '.*' {} \;
:执行grep命令。这是必需的,因为find
命令无法区分二进制文件和文本文件,因为它没有查看文件内部。 grep
会查看内部文件。 .*
告诉grep
任何字符组合都匹配。
-lI
:这表示grep
查看前几位并确定文件是否为二进制。如果它是二进制文件,它将继续处理,就好像不匹配一样。 -l
这里只打印出文件名的名称。
整个命令find ~ \( -type f -regextype posix-extended -regex '.*' -exec grep -lI '.*' {} \;
作为argslist
传递给vim(ElementTree documentation)。
wildignore
以包含所有类型的二进制文件.viminfo
中。通过使用q:
,您可以调出以前输入的ex
模式命令,然后在缓冲区内搜索以查找此特定命令,只需更改必要的字段:cn
wildignore
@ Ingo-karat指出,你仍然应该仔细填写wildignore
,因为很多程序都会使用wildignore
。
您可以直接使用vimgrep
代替gr
,也可以通过-lI
直接提供greprg
参数。但是,我还没有尝试过。