30

在 vim 中,我经常使用 vimgrep 进行搜索。我有如下映射:

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

问题是我不想搜索一些临时子文件夹(如 obj、objd)。如何排除与给定模式匹配的子文件夹。例如,搜索中不应包含前缀为“objd”的子文件夹。

4

4 回答 4

34

从 Vim 7.3.570 开始,您可以使用 wildignore 来排除带有 vimgrep 的模式。

例如,忽略 objd 子文件夹:

:set wildignore+=objd/**

可以通过用逗号分隔模式来添加其他排除:

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

有关更多详细信息,请参阅 Vim 的帮助文档。

:help wildignore
于 2013-11-18T07:09:56.503 回答
15

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
于 2019-12-31T12:18:08.527 回答
12

你可以试试ack。它与 vim 很好地集成,并且有很多选项可以做你想做的事情。

GitHub 上有几个 ack-vim 集成。例如:这里

于 2009-12-15T16:17:26.747 回答
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 
  • Ctr+F 打开搜索框,玩得开心
于 2013-05-26T20:58:51.933 回答