在 vim 中,我经常使用 vimgrep 进行搜索。我有如下映射:
map <leader>s :execute "noautocmd vimgrep /\\<" . expand("<cword>") . "\\>/gj **/*.*" <Bar>
cw<CR> 5
问题是我不想搜索一些临时子文件夹(如 obj、objd)。如何排除与给定模式匹配的子文件夹。例如,搜索中不应包含前缀为“objd”的子文件夹。
从 Vim 7.3.570 开始,您可以使用 wildignore 来排除带有 vimgrep 的模式。
例如,忽略 objd 子文件夹:
:set wildignore+=objd/**
可以通过用逗号分隔模式来添加其他排除:
:set wildignore+=objd/**,obj/**,*.tmp,test.c
有关更多详细信息,请参阅 Vim 的帮助文档。
:help wildignore
如http://vimcasts.org/blog/2013/03/combining-vimgrep-with-git-ls-files/中所示,您可以包含要搜索的文件,而不是排除文件。所以你可以在 Git 跟踪的文件中搜索
:noautocmd vimgrep /{pattern}/gj `git ls-files`
这样,您就不会搜索.gitignore
.
我经常使用它,为此我创建了一个命令,所以我只需要
:Sch {pattern}
我通过将以下行添加到我的 .vimrc 来做到这一点
command -nargs=1 Sch noautocmd vimgrep /<args>/gj `git ls-files` | cw
例如在 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