1. 前言
在AS中,我們經(jīng)常使用 Ctrl+Shift+F 的 File in Path 去搜索內(nèi)容,但是總是會(huì)搜索出很多非項(xiàng)目的或者包含Build下的文件結(jié)果,現(xiàn)在就來解決一下這個(gè)問題。

2. File in Path 的 Scope
Scope提供了自定義搜索范圍功能,可以添加設(shè)置自己想要的搜索范圍。
2.1 進(jìn)入Scope設(shè)置
Ctrl+Shift+F 打開 File in Path

2.2 Scope設(shè)置介紹


2.3 Scope設(shè)置操作

3. 定制想要的搜索范圍
操作的時(shí)候,使用左邊目錄選擇,加右邊操作,可以快速定制。但是一般還需要通過手動(dòng)調(diào)整 Pattern 來達(dá)到更精準(zhǔn)效果。
3.1 默認(rèn)搜索范圍
File in Path 默認(rèn)搜索范圍包含三大塊,選擇 Package 方式查看,分別是 Libs Classes,Production Classes,Test Classes。值得注意的是,使用 Project 只能看到 項(xiàng)目目錄,但是搜索時(shí)的范圍,還是包含前面提到的三大塊。在包含文件數(shù)目中,可以看到寫明【未顯示非項(xiàng)目目錄】
-
Libs Classes:項(xiàng)目中所有使用到的類庫,除了引入的三方類庫如Okhttp,還包含android sdk本身類庫 -
Production Classes:項(xiàng)目文件。一般會(huì)分兩個(gè)目錄。一個(gè)源碼目錄,一個(gè)非源碼目錄(包含build生成文件,未在settting中include的模塊等)。 -
Test Classes:單元測試文件。


3.2 定制操作

- 定制過程,根據(jù)Package和Project相結(jié)合查看,當(dāng)前Scope的搜索目錄范圍。
- 然后可以使用右側(cè)功能進(jìn)行操作,或者直接修改過濾條件
Pattern。建議熟悉語法后使用Pattern,因?yàn)樽罱K都是靠Pattern生效的,而且右側(cè)功能局限太大,不夠靈活。 - 調(diào)整范圍后,邊上的搜索文件數(shù)目會(huì)實(shí)時(shí)更新,可以得知自己的語法有沒有生效,是否過濾掉了一些非目標(biāo)范圍。
- 切換
Package和Project查看目錄范圍,確認(rèn)無誤后,保存。 - 最終實(shí)際使用,查看搜索結(jié)果是否符合目的了。若未達(dá)到目標(biāo),看看結(jié)果中還有哪些目錄未過濾掉,然后再調(diào)整過濾條件重新嘗試。
3.3 語法簡介
語法格式
-
[header][model_name]:path:model_name不一定需要。例:file[Example.app]:src/main/myDir/*。
頭部
-
file:指定文件 -
src:項(xiàng)目src目錄文件 -
lib:引用到的庫文件,包括第三方及android sdk的。 -
test:測試用例文件
指定模塊
-
[heard][module name]:例如file[app],或file[Demo.app]。
尾部
路徑,可以用 * 代表作為通配符,指任意。例如:file:*/build//*,指任意build目錄,匹配xxx/build/xxxxx,后面//*的一個(gè) / 屬于轉(zhuǎn)意,放在 *。
運(yùn)算符
-
&&:與 -
||:或 -
!:非
3.4 最終效果
下面以搜索 項(xiàng)目文件(包含未include模塊源碼) 為目的,給出最終結(jié)果,并解釋各項(xiàng)。
file[*]:*/&&!file:*build//*&&!file[*]:*libs//*&&!test:*..*&&!file:*.iml&&!file:*.aar&&!file:mapping.txt&&!file:.gitignore&&!file:.idea//*&&!file:gradle//*
file[*]:*/:指定范圍,項(xiàng)目下所有模塊的所有文件。這樣可以排除項(xiàng)目外的路徑,如Android庫等。!file:*build//*:排除所有build文件夾及其內(nèi)容!file[*]:*libs//*:排除所有模塊下libs文件夾及其內(nèi)容!test:*..*:排除所有test用例!file:*.iml:排除iml類型文件!file:*.aar:排除aar類型文件!file:mapping.txt:排除mapping.txt文件!file:.gitignore:排除gitignore文件!file:.idea//*:排除idea目錄!file:gradle//*:排除gradle目錄
4. Scope組合使用
除了直接使用一條完整的Scope過濾代碼,也可以把他們拆開,使用 &&、||、! 進(jìn)行自由組合。記得先保存,引用才能生效。

4. 參考
StackOverflow:
Android Studio : Exclude files in build folder from search result
IntelliJ IDEA - JetBrains:
Scopes—IntelliJ IDEA - JetBrains
Scopes語法介紹