IntelliJ IDEA导航特性Top20
在前面的文章里,我介紹了IntelliJ?IDEA(以下稱IntelliJ)中與代碼補全及重構(gòu)相關(guān)的特性。今天我將介紹另外一個利器——IntelliJ的導(dǎo)航(Navigation),只要運用得當(dāng),它將節(jié)約你大把的時間。
作為一個IntelliJ的用戶,你應(yīng)先明確一點——IntelliJ是用來讓你專注于代碼的工具。只有這樣我們才能充分利用并享受它的魔力。因此,大部分的時間里你應(yīng)該專心工作于代碼編輯器中,僅把導(dǎo)航當(dāng)做在不同位置的代碼間快速切換的好幫手。
本文旨在介紹IntelliJ的導(dǎo)航在工程文件(project?files)、代碼塊(block of code),及工具窗口(tool?window)、編輯器標(biāo)簽等UI元素上的特性。
1、最近編輯的文件
如果停下來仔細(xì)分析你所有的導(dǎo)航行為(Navigation Pattern),你會意識到,在大部分的時間里你只固定的一些文件上工作。這就很好地解釋了為什么Recent files是IntelliJ用戶的常用特性。一旦能熟練使用它,你就會將其逐漸引入到你大部分的導(dǎo)航操作中去。而使用這一特性只需使用快捷鍵Ctrl+E(OS?X為Cmd+E)。
請注意,該功能默認(rèn)選中最后訪問的文檔,所以只需使用回車或者鼠標(biāo)單擊便能跳轉(zhuǎn)到此文件。如果想減少列表中的候選項,則可以借助Speed?Search?功能——輸入目標(biāo)文件名中的一部分,列表將僅顯示匹配項。
2、結(jié)構(gòu)菜單(Structure popup)
另一個你每天都會做的,就是要在當(dāng)前打開的文件中四處奔波,而文件有一個共性:它們有自己的文件結(jié)構(gòu)。例如,一個Java的類文件含有字段和方等成員組成的結(jié)構(gòu)。XML和HTML文 件包含一個標(biāo)簽樹(tags?tree)結(jié)構(gòu)。如果想快速的導(dǎo)航到文件結(jié)構(gòu)的某一部分,那就快按下Ctrl+F12(OS?X?上為Cmd+F12)來選 擇想跳轉(zhuǎn)的地方吧。(同樣的,Speed? Search亦可用于減少列表中的候選項)
有時,你對信息的需求可能會影響Structure?popup中顯示的內(nèi)容。例如,一個Java類的結(jié)構(gòu)圖可能包含了與其相關(guān)的基類或接口的結(jié)構(gòu)信息。不過在默認(rèn)情況下,IntelliJ會隱藏它們,如果確實需要,那么再按一次快捷鍵即可。
IntelliJ會貼心地記錄你在Structure?popup中的操作偏好,并在下一次調(diào)用它時體現(xiàn)出來。
3、跳轉(zhuǎn)至導(dǎo)航欄
通常,屏幕中只顯示含代碼的編輯器是一件喜聞樂見的事情。但也有人希望看到項目樹(project?tree),因為它有助于理解或者快速修改項目的上下文。?事 實上,在項目樹和編輯器之間切換是IntelliJ中極其容易的事情。不過事實上,項目樹并非最佳選擇。老練的IntelliJ用戶知道一個更好的替代 品:導(dǎo)航欄。新用戶常以為那只不過是一個面包屑菜單(breadcrumb)罷了,但在有經(jīng)驗的開發(fā)者眼中,這可是一把瑞士軍刀!按下快捷鍵 Alt+Home(OS X為Alt +?↖? )執(zhí)行Jump to navigation bar的操作,我們就能感受到它的威力——利用它我們可以跳轉(zhuǎn)至項目的每一處,可以創(chuàng)建和修改任一文件以及其他許許多多有意義的事情。
值得一提的是,即便在導(dǎo)航欄隱藏時,我們也可以執(zhí)行此操作。
?4、跳轉(zhuǎn)至指定類
你可能會想:Go to a class這么一個簡單的操作有什么好說的?也許你已經(jīng)知道Ctrl+N(OS?X中為Cmd+N)能夠在類之間跳轉(zhuǎn),但不見得你就知道這個功能比它看起來強大得多。除了各家IDE都支持的簡單通配符、駝峰式命名、包名前綴以外,IntelliJ還可以將中間名匹配(middle name matching)、行號后綴、快速文檔、定義菜單(definition popups)等方法引入這一功能:
默認(rèn)情況下,Go to a class功能的搜索僅會在你的項目中執(zhí)行。若沒有匹配項,再按一下快捷鍵,搜索將在項目引用的庫中展開。
在IntelliJ中,我們完全可以不借用鼠標(biāo)便輕易地執(zhí)行類間跳轉(zhuǎn):當(dāng)菜單出現(xiàn)的時候,輸入或修改查詢語句,最后利用鍵盤的上下鍵選擇目標(biāo)即可。若你曾試圖在其他IDE中嘗試這種方法,你肯定知道我在說什么。
5、跳轉(zhuǎn)至指定的文件或目錄
當(dāng)你需要打開項目中特定的文件,利用快捷鍵Ctrl+Shift+N(OS X中為Cmd + Shift + N )是個不二的選擇。除了實現(xiàn)其基本的功能外,你還可以借由通配符、駝峰式命名以及目錄名前綴等方法進行搜索。
6、跳轉(zhuǎn)至指定符號
終于要介紹Go to…特性家族里的最后一位重要成員了——Go to a symbol。 通過快捷鍵Ctrl + Shift + Alt + N (OS?X為Cmd + Shift + Alt + N ),便能在不用全文搜索(full-text search)的情況下導(dǎo)航到指定的符號處。因為IntelliJ會一直維護項目及庫中所有符號的索引,所以無論項目規(guī)模多么龐大,它依舊可以在通過相應(yīng) 表達式在幾秒內(nèi)輕易地找到匹配的方法或字段。
7、在…中選定
如果需要在特定的工具窗口(如Project/Changes View,甚至Explorer/Finder)中選定正在編輯的文件,那么通過快捷鍵Alt+F1來使用Select in…的功能是再方便不過了。
8、切換至指定的工具窗口
IntelliJ的大多數(shù)工具窗口都分配了簡單的快捷鍵組合。通過快捷 鍵,你便能快速呼出對應(yīng)的工具窗口并使其獲得焦點。在工具窗口獲得焦點時再按一次快捷鍵,工具窗口將會隱藏,你便能返回編輯器上工作啦。這種方法實在是方 便,更重要的是,它讓你完全擺脫了鼠標(biāo)——每當(dāng)需要某一個特定的工具窗口或者想返回編輯器,按快捷鍵就好了。
確保你至少能記住以下幾個快捷鍵:
- Project工具窗口:Alt + 1 (OS X中為Cmd + 1)
- Changes工具窗口:Alt + 9(OS X中為Cmd + 9)
- Terminal工具窗口:Alt +?F12
9、返回編輯器
很多人都不知道IntelliJ的一個小竅門——按下Escape就能返回編輯器。當(dāng)你使用這種方法時,此前被呼出的工具窗口仍保持其可視狀態(tài)。當(dāng)然啦,如 果你不想看到這些窗口,按下快捷鍵Ctrl + Alt + F12(OS?X為Cmd+ Alt + F12)即可。
(譯注: 在本地測試時該快捷鍵對應(yīng)File?Path,而Shift+F12才是正確的快捷鍵)
10、跳轉(zhuǎn)至關(guān)聯(lián)的單元測試
當(dāng)你正在編寫代碼,特別是想同時確保代碼順心如意,常用的導(dǎo)航功能是什么呢?當(dāng)然是在類和對應(yīng)的單元測試中來回切換啦。IntelliJ可以識別每一個類所關(guān)聯(lián)的測試,并且提供Go to a test的工能。按下Ctrl + Shift + T?(OS?X?為Cmd + Shift + T),便能在它們之間來去自如:
如果在使用這一功能的類沒有相關(guān)聯(lián)的測試,則IntelliJ會好心地幫你生成一個。
11、跳至上方的層級
另 一個常見的行為是,你會為了某個類或者其某個方法,需要瀏覽該類的層級結(jié)構(gòu)。在大多數(shù)IDE中,你能看到一個圖標(biāo)出現(xiàn)在與方法定義處于同一行的 gutter里(譯注:gutter即編輯器左側(cè)的窄條,可見特性21)。通過點擊這個圖標(biāo),就導(dǎo)航到了父類(或接口)中該方法定義的位置。除此以 外,IntelliJ獨創(chuàng)了一個叫Super Method的功能,按下快捷鍵Ctrl + U (OS?X為Cmd + U?)即可。它在無不借助鼠標(biāo)的情況下實現(xiàn)向上跳轉(zhuǎn)一級。
12、跳至下方的層級
既然可以向上跳轉(zhuǎn),憑啥不能向下呢?話雖如此,事實上,鮮有 IDE實現(xiàn)了這一功能,所幸IntelliJ就是其中的一個。除了提供跳轉(zhuǎn)至父類的圖標(biāo),IntelliJ同樣提供一個可導(dǎo)航至子類對應(yīng)方法的定義位置的 圖標(biāo),所以,在IntelliJ的世界,可謂“上天入地”(up and down)無所不能。
如果想不用鼠標(biāo),并更快地導(dǎo)航至下層,那就使用快捷鍵Ctrl + Alt + B (OS?X?為 Cmd + Alt + B for OS X)調(diào)用Implementations來實現(xiàn)吧,它將列出所有實現(xiàn)了當(dāng)前類的子類讓你挑選:
13、方法層級圖
那要是想查看有關(guān)所有實現(xiàn)或者覆寫了當(dāng)前方法的類的結(jié)構(gòu)圖呢?在IntelliJ中,有一個Method Hierarchy的功能,可以通過快捷鍵Ctrl + Shift + H?(OS?X?為?Cmd + Shift + H?)來調(diào)用。這個功能讓你能導(dǎo)航至所有符合這一關(guān)系的類中:
14、圖解菜單(Diagram popup)
我們剛學(xué)習(xí)了一些在有關(guān)方法定義的層級結(jié)構(gòu)中導(dǎo)航的門路。可能在某些時候還要在當(dāng)前的類(或者說光標(biāo)所處的類,無論它有多少的方法)的層次結(jié)構(gòu)中使用導(dǎo)航。大多數(shù)IDE通過提供單個類或接口的層級結(jié)構(gòu),以實現(xiàn)這一需求。在IntelliJ里這種功能稱為類型層級(Type Hierarchy),其快捷鍵為Ctrl+H。
如你所見,該功能返回一個樹形結(jié)構(gòu)。有些人可能覺得這種格式難以理解,所以IntelliJ同時提供了另一個稱為Diagram popup——快捷鍵為Ctrl + Alt + U?(OS?X?為Cmd +?Alt + U)——的功能,以UML圖的方式替代樹形結(jié)構(gòu)來描述給定的類的層級結(jié)構(gòu):
不用提醒你就能知道,通過它我們可以導(dǎo)航到任何由圖形所表示的類或接口中。
15、方法調(diào)用層級結(jié)構(gòu)
除了類和方法定義的層級結(jié)構(gòu)以外,我們還有一個特殊的導(dǎo)航行為:在方法調(diào)用的層級結(jié)構(gòu)中導(dǎo)航。每一個方法會調(diào)用很多調(diào)用另一些方法的方法,以此類推。這就是為什么有時你需要導(dǎo)航到被當(dāng)前方法所調(diào)用或者調(diào)用了它的方法中去。通過快捷鍵Ctrl + Alt + H來借助Call Hierarchy功能,便可讓IntelliJ為你快速地呈現(xiàn)當(dāng)前方法的調(diào)用層級結(jié)構(gòu):
16、顯示使用情況
導(dǎo)航到使用了光標(biāo)指定的符號的位置,亦是一件常有的事。為了做到這一點,每個IDE都會提供一個Find usages的功能。但這個功能的缺點在于,它通常實現(xiàn)得十分“笨重”——它不僅要單獨啟動一個長時間運行的進程,還需要創(chuàng)建一個工具窗口來顯示結(jié)果。為此IntelliJ提供了一個輕量級的解決方案——Show usages,其快捷鍵為Alt + Ctrl +?F7 (OS?X?為Cmd + Alt + F7?):
?
這個功能以菜單的形式展示結(jié)果,并且默認(rèn)情況下只在工程級別(Project?level)的范圍內(nèi)運行。如果再調(diào)用一次該功能,其運行范圍將擴充至工程和庫級別(Project and libraries?level)。
17、最近編輯的文件
在前面的內(nèi)容中我介紹了如何導(dǎo)航至最近訪問的文件。那么如果我希望在篩選出最近被編輯過的文件呢?在IntelliJ中只需通過快捷鍵Ctrl + Shift + E?(OS?X中為Cmd + Shift + E)調(diào)用Recently Edited Files功能便能輕易滿足這一需求:
18、在視圖與控制器中間導(dǎo)航
你認(rèn)為一個IDE只了解項目的文件中最基本的關(guān)系(如類的層次結(jié)構(gòu),測 試覆蓋率,使用情況等)便夠了嗎?那些特殊的關(guān)系呢?按下Ctrl+ Alt + Home?(OS?X為Cmd + Alt + Home),即可借助IntelliJ?IDEA?提供的Related symbol的功能,讓你能夠獲得基于這些特殊關(guān)系(如在Sping?MVC、Grails、甚至JavaFX應(yīng)用的views和controllers之間)的導(dǎo)航功能。
19、導(dǎo)航至特性視圖控制器(View controller)
既然IntelliJ能夠弄清項目中的一些特殊關(guān)系,那么它還具有哪些專用的導(dǎo)航功能呢?如果你是一個Web?App開發(fā)者,可以通過輸入與view?controller相關(guān)聯(lián)的URL,調(diào)用Go to a symbol功能,快捷地找到它:
20、數(shù)據(jù)庫相關(guān)導(dǎo)航模式
IntelliJ的那些數(shù)據(jù)庫工具也提供特殊的導(dǎo)航行為。在數(shù)據(jù)庫工具窗口中,調(diào)用Go to a symbol,并鍵入表(table)的名字,便能快速地跳轉(zhuǎn)至表中:
如果在一個表或者一個列(column)中使用Find usages功能,IntelliJ便將展示所有引用了它的表:
更讓人欣喜若狂的是,IntelliJ可以根據(jù)主鍵的使用情況,將你導(dǎo)航到其它表中。比如,你可以要求IDE顯示在其它表中,哪些行引用了當(dāng)前行的主鍵值:
21、書簽
我 們接著來看看最后一個重要的行為——通過書簽導(dǎo)航導(dǎo)航至任何你感興趣的位置。IntelliJ提供了非常方便的工具實現(xiàn)這一功能。按下F11,便可將當(dāng)前 的位置在書簽表中添加(或刪除)。一旦完成添加操作,你便能在gutter里看到一個相應(yīng)的圖標(biāo)。之后,每當(dāng)想返回保存為書簽的那個位置,按一下 Shift+F11,然后從列表中選擇即可:
總結(jié)
希望這篇文章讓你初步了解了如何利用IntelliJ強大的導(dǎo)航功能,實現(xiàn)在自己工作的代碼中快速地切換,以保證自己專注于代碼之中。換句話說,如果能讓自己在切換上所花的時間越少,你的生產(chǎn)效率就會越高。
另外,請記住——對自己所使用的IDE了解得更多,你的編程生活就會變得更加愜意。
原文鏈接:? dzone ?翻譯:? ImportNew.com? -? elviskang譯文鏈接:?http://www.importnew.com/15462.html
總結(jié)
以上是生活随笔為你收集整理的IntelliJ IDEA导航特性Top20的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP报文段首部格式详解
- 下一篇: Comparable与Comparato