在vim中,我经常使用vimgrep进行搜索。我有如下映射:
map <leader>s :execute "noautocmd vimgrep /\\<" . expand("<cword>") . "\\>/gj **/*.*" <Bar>
cw<CR> 5
问题是我不想搜索一些临时子文件夹(如obj,objd)。如何排除与给定模式匹配的子文件夹。例如,前缀为“objd”的子文件夹不应包含在搜索中。
答案 0 :(得分:27)
从Vim 7.3.570开始,你可以使用wildignore来用vimgrep排除模式。
例如,要忽略objd子文件夹:
:set wildignore+=objd/**
可以通过用逗号分隔模式来添加其他排除项:
:set wildignore+=objd/**,obj/**,*.tmp,test.c
有关更多详细信息,请参阅Vim的帮助文档。
:help wildignore
答案 1 :(得分:12)
答案 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
答案 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`
中所述的文件。