从Eclipse搜索中排除文件夹

280

有没有一种方法可以在Eclipse中排除特定的文件夹(以及它们所有的子文件夹)在搜索中不被包含?


1
谷歌员工请看(atzz的回答):https://dev59.com/0HRB5IYBdhLWcg3w-8Lo#6111002 - 这是你们要找的答案,而不是被采纳的答案。 - Andrew
@Andrew,这现在是被接受的答案。 - Dónal
全人类应享有公正! - Andrew
6个回答

298

一种快速而简单的方法:

右键单击文件夹,进入属性,标记该文件夹为派生的。派生实体默认情况下被排除在搜索之外。这种方法的问题在于,如果你删除了这个文件夹(无论是在Eclipse内部还是外部),Eclipse会“忘记”它是派生的,并且需要刷新项目树。正如在Eclipse中经常发生的情况一样,这是一个长期存在的错误(在这种情况下已经有10年了),并且仍然适用于当前版本(写作时为4.6 Neon)。

一种安全的方法:

创建一个工作集,只包括您想要搜索的那些实体,并只在该工作集内进行搜索。有关此过程的详细信息,请参见Dave Ray的答案


2
正如Dave在他的回答中指出的那样:将本不应该被推导的东西设置为被推导可能会引起问题。就像使用Maven创建分发时一样。 - Arjan
2
在Juno中,将文件夹标记为派生的并不会将其从搜索中排除。我正在Mac OS上工作,所以这可能与此有关,因为我发现在这个操作系统上有许多功能无法正常工作。 - Marc
@Instantsoup 为什么搜索本身不能排除文件夹?我的意思是,它有“!”字符专门用于此,不是吗?我不明白为什么对我不起作用。 - android developer
3
仅创建“包括您想要搜索的实体的工作集”并不是一种非常安全的方法。事实上,包容性过滤器相当不安全。想象一下创建一个与被排除的目录或文件同级的新目录或文件。在这种情况下,您必须记住将其包含在搜索范围内。如果您忘记了,搜索结果可能会出现误报,这可能会导致您认为Eclipse搜索不可靠。 - JW.
以防有人在某个时候会想知道,这也适用于Eclipse的PHP版本4.5.1。我发帖是因为有人问我,所以我猜可能还有其他人也会想知道同样的问题。 - Dimitris Damilos
显示剩余3条评论

262

以下是我使用的方法(我使用的是Helios版本 - 可能在最初提出该问题时这种方式还不可用?)

  • 进入 项目 -> 属性 -> 资源过滤器。
  • 点击 添加 按钮。
  • 选择 过滤器类型: 排除全部
  • 选择 适用于: 文件夹;勾选 所有子文件夹(递归)
  • 在属性中,选择 名称匹配.svn (例如)。

(实际上,我使用 .* 来一次性过滤掉 .svn、.hg 等文件夹。)

在确认项目属性对话框后,这些目录将不再出现在搜索结果中。事实上,Eclipse非常友好地自动更新 现有的 搜索结果窗口,并删除所有现在被过滤掉的匹配项。


27
截至2011年(Helios和Indigo版本),对于最新的Eclipse版本,这应该是被接受的回答并且是最简单的方法。 - András Szepesházi
9
由于这只能应用于一个项目,所以与标记衍生文件夹相比并没有多大优势...而且根据你需要输入筛选器的次数,可能会更加耗时。 - egid
使用这种方法时,请务必在添加资源筛选器后清除搜索历史记录(使用搜索面板中的带有向下箭头按钮的闪光灯)。否则,您将不会节省任何搜索时间,并且您将收到“.git / ... / filename.file不存在”错误,因为搜索缓存(我想是?)仍然认为.git文件夹是一个有效的查找位置。 - coredumperror
20
这个方案可行,但会在包资源管理器中隐藏文件。我们可能想要编辑这些文件,但不希望在搜索结果中看到它们。 - Aram Kocharyan
当我尝试使用它来过滤搜索结果时,它起作用了,但是我开始收到错误信息:“在项目'Mercadosa-webapp'上运行构建器'AspectJ Builder'时出错。 磁盘上已存在资源:'/MyProject/target/MyProject-1.0/WEB-INF/freemarker/site/file.ftl'。 磁盘上已存在资源:'/MyProject/target/MyProject-1.0/WEB-INF/freemarker/site/file.ftl'。” - Marc
显示剩余4条评论

88

我可以想象标记派生资源可能会在其他领域引起问题。相反,创建一个工作集,其中包含您想要包括在搜索中的文件夹:

  • 打开搜索对话框(Ctrl+H
  • 将搜索范围更改为“工作集”
  • 单击“选择...”
  • 单击“新建”以创建一个新的工作集,并进行所需的搜索(或添加所有内容,然后删除要过滤的内容)

5
这也有问题。请参见我在上面Instantsoup答案下面的评论。使用这个包容性过滤器,在某些情况下,当你添加文件或文件夹时,你必须记得将它们包括在搜索中。如果你忘记了,就会出现危险的错误结果,这并不理想。 - JW.
在Eclipse Kepler中,单击“新建”后会出现一个“选择工作集类型”的对话框。(值得注意的是,在此时需要选择“资源”才能找到所有类型的文件。) - Steve Chambers

4
  • 右键点击您的项目
  • 选择属性
  • 选择资源 -> 资源过滤器
  • 单击添加过滤器
  • 选择以下设置:
    • 排除全部
    • 文件和文件夹
    • 所有子项(递归)
  • Name更改为项目相对路径
  • 使用(bin$|bin/.*|build/.*|build$)填充输入文本(用要排除的文件夹的名称替换binbuild)
  • 选中正则表达式

单击“确定”,然后应用。

免责声明

这是在@atzz的答案基础上构建的,帮助我解决了这个问题。然而,它确实回答了如何排除某些文件的问题,但没有回答如何排除某些文件夹的问题。


1

在Eclipse Juno中最好的快速方法:

  1. 右键单击文件夹
  2. 进入属性。
  3. 进入C/C++构建。
  4. 勾选“从构建中排除资源”。
  5. 点击确定按钮。
  6. 右键单击项目
  7. 进入索引。
  8. 点击重新构建。
  9. 放松!

0
在Eclipse中排除文件夹或文件被搜索
1 Right-click on the file/folder.
3 Click on the "Properties" option.
4 Select the "Resource" option.
5 Place a check next to the "Derived" attribute.

希望能够帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接