如何在vimgrep中排除文件模式?

时间:2009-12-14 04:49:31

标签: vim vimgrep

在vim中,我经常使用vimgrep进行搜索。我有如下映射:

map <leader>s :execute "noautocmd vimgrep /\\<" . expand("<cword>") . "\\>/gj **/*.*" <Bar> 
cw<CR> 5

问题是我不想搜索一些临时子文件夹(如obj,objd)。如何排除与给定模式匹配的子文件夹。例如,前缀为“objd”的子文件夹不应包含在搜索中。

4 个答案:

答案 0 :(得分:27)

从Vim 7.3.570开始,你可以使用wildignore来用vimgrep排除模式。

例如,要忽略objd子文件夹:

:set wildignore+=objd/**

可以通过用逗号分隔模式来添加其他排除项:

:set wildignore+=objd/**,obj/**,*.tmp,test.c

有关更多详细信息,请参阅Vim的帮助文档。

:help wildignore

答案 1 :(得分:12)

您可以尝试使用ack。它与vim很好地集成,并且有很多选项可以用来做你想做的事情。

GitHub上有几个ack-vim集成。例如:here

答案 2 :(得分:2)

例如在Ubuntu中

sudo apt-get install ack-grep

sudo ln -s /usr/bin/ack-grep /usr/bin/ack

然后安装http://www.vim.org/scripts/script.php?script_id=2572

现在将下一行添加到.vimrc

noremap <C-f> :copen<CR>:Ack --ignore-dir #first_ignore_dir# --ignore-dir #second_ignore_dir# -ai 
  • Ctr + F的开放搜索框架,玩得开心

答案 3 :(得分:0)

http://vimcasts.org/blog/2013/03/combining-vimgrep-with-git-ls-files/中所示,您可以包括要搜索的文件,而不是排除文件。因此,您可以使用

在Git跟踪的文件中进行搜索
ValueA      ValueB      ValueC        join Field
----------- ----------- ------------- -------------
value of A1 value of B1 value of C1B1 NULL
value of A1 value of B2 value of C2B2 NULL
value of A1 value of B2 value of C3B2 value of C3B2

(3 linhas afetadas)

通过这种方式,您不会搜索:noautocmd vimgrep /{pattern}/gj `git ls-files` 中所述的文件。