How to exclude file patterns in vimgrep?

14.7k Views Asked by At

In vim, I do search with vimgrep frequently. I have mapping like below:

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

The problem is that there are some temporary subfolders (like obj, objd) that I don't want to search for. How can I exclude subfolders matching given patterns. For example, subfolders with prefix "objd" should not be included in searching.

5

There are 5 best solutions below

1
On

You could try ack instead. It integrates nicely with vim and has lots of options for doing the sort of thing you want to do.

There are several ack-vim integrations on GitHub. For example: here.

0
On

For example in Ubuntu just

sudo apt-get install ack-grep

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

then install http://www.vim.org/scripts/script.php?script_id=2572

and now add next line to your .vimrc

noremap <C-f> :copen<CR>:Ack --ignore-dir #first_ignore_dir# --ignore-dir #second_ignore_dir# -ai 
  • its open search frame by Ctr+F, have fun
0
On

Seem to also ignore node_modules folder on root and if node_modules is in sub directories.

set wildignore+=*/node_modules/**
5
On

As of Vim 7.3.570, you can use wildignore to exclude patterns with vimgrep.

For example, to ignore the objd subfolder:

:set wildignore+=objd/**

Additional exclusions can be added by separating patterns with a comma:

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

See Vim's help documentation for a few more details.

:help wildignore
0
On

As showed in http://vimcasts.org/blog/2013/03/combining-vimgrep-with-git-ls-files/ you could instead of exclude files, include the files you want to search. So you can search in the files tracked by Git with

:noautocmd vimgrep /{pattern}/gj `git ls-files`

In this way you are not searching the files stated in the .gitignore.


I use it so much I created a command for that, so I just need to

:Sch {pattern}

and I did it by adding the following line to my .vimrc

command -nargs=1 Sch noautocmd vimgrep /<args>/gj `git ls-files` | cw