") . "\\>/gj " /> ") . "\\>/gj " /> ") . "\\>/gj "/>

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
Andy Stewart 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
IvanM 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
5
Edmond Burnett 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
Jp_ 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
0
Jan On

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

set wildignore+=*/node_modules/**