In vim, I do search with vimgrep frequently. I have mapping like below:
map <leader>s :execute "noautocmd vimgre开发者_C百科p /\\<" . 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.
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
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
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.
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
精彩评论