所以我正在开发一个包含多种资源的项目:XML、javascript、QML、图像、3D 场景。我经常想在我的项目中搜索模式。使用 vimgrep /mypattern/j ** 很长,特别是因为它在二进制文件中搜索。我可以使用
:vimgrep /mypattern/j *.xml
:vimgrepadd /mypattern/j *.js
但我更愿意在一个命令中完成。
另一种看待它的方式:如何防止 vimgrep 在二进制文件中搜索?
所以我正在开发一个包含多种资源的项目:XML、javascript、QML、图像、3D 场景。我经常想在我的项目中搜索模式。使用 vimgrep /mypattern/j ** 很长,特别是因为它在二进制文件中搜索。我可以使用
:vimgrep /mypattern/j *.xml
:vimgrepadd /mypattern/j *.js
但我更愿意在一个命令中完成。
另一种看待它的方式:如何防止 vimgrep 在二进制文件中搜索?
您可以将多个文件 glob 传递给:vimgrep
:
:vimgrep /mypattern/j *.xml *.js
要排除某些文件,您可以配置'wildignore'
排除它们的选项,例如
:set wildignore=*.dll,*.exe
您可以使用和的组合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 ( http://vimcasts.org/episodes/meet-the-arglist/ )。
wildignore
非常小心地定义包含所有类型的二进制文件.viminfo
. 通过使用q:
,您可以调出先前输入的ex
模式命令,然后在缓冲区中搜索以找到此特定命令并只需更改必要的字段:cn
wildignore
wildignore
正如@Ingo-karat 指出的那样,您仍然应该仔细填写,因为wildignore
很多程序都在使用它。
而不是vimgrep
,也许您可以直接使用gr
并且您可以通过 直接为其提供-lI
参数greprg
。但是,我还没有尝试过。