在前面的文章裏,我介紹了IntelliJ IDEA(如下稱IntelliJ)中與代碼補全及重構相關的特性。今天我將介紹另一個利器——IntelliJ的導航(Navigation),只要運用得當,它將節約你大把的時間。數據庫
做爲一個IntelliJ的用戶,你應先明確一點——IntelliJ是用來讓你專一於代碼的工具。只有這樣咱們才能充分利用並享受它的魔力。所以,大部分的時間裏你應該專心工做於代碼編輯器中,僅把導航當作在不一樣位置的代碼間快速切換的好幫手。編程
本文旨在介紹IntelliJ的導航在工程文件(project files)、代碼塊(block of code),及工具窗口(tool window)、編輯器標籤等UI元素上的特性。intellij-idea
若是停下來仔細分析你全部的導航行爲(Navigation Pattern),你會意識到,在大部分的時間裏你只固定的一些文件上工做。這就很好地解釋了爲何Recent files是IntelliJ用戶的經常使用特性。一旦能熟練使用它,你就會將其逐漸引入到你大部分的導航操做中去。而使用這一特性只需使用快捷鍵Ctrl+E(OS X爲Cmd+E)。編輯器
請注意,該功能默認選中最後訪問的文檔,因此只需使用回車或者鼠標單擊便能跳轉到此文件。若是想減小列表中的候選項,則能夠藉助Speed Search 功能——輸入目標文件名中的一部分,列表將僅顯示匹配項。ide
另外一個你天天都會作的,就是要在當前打開的文件中四處奔波,而文件有一個共性:它們有本身的文件結構。例如,一個Java的類文件含有字段和方等成員組成的結構。XML和HTML文 件包含一個標籤樹(tags tree)結構。若是想快速的導航到文件結構的某一部分,那就快按下Ctrl+F12(OS X 上爲Cmd+F12)來選 擇想跳轉的地方吧。(一樣的,Speed Search亦可用於減小列表中的候選項)工具
有時,你對信息的需求可能會影響Structure popup中顯示的內容。例如,一個Java類的結構圖可能包含了與其相關的基類或接口的結構信息。不過在默認狀況下,IntelliJ會隱藏它們,若是確實須要,那麼再按一次快捷鍵便可。單元測試
IntelliJ會貼心地記錄你在Structure popup中的操做偏好,並在下一次調用它時體現出來。學習
一般,屏幕中只顯示含代碼的編輯器是一件喜聞樂見的事情。但也有人但願看到項目樹(project tree),由於它有助於理解或者快速修改項目的上下文。 事 實上,在項目樹和編輯器之間切換是IntelliJ中極其容易的事情。不過事實上,項目樹並不是最佳選擇。老練的IntelliJ用戶知道一個更好的替代 品:導航欄。新用戶常覺得那隻不過是一個麪包屑菜單(breadcrumb)罷了,但在有經驗的開發者眼中,這但是一把瑞士軍刀!按下快捷鍵 Alt+Home(OS X爲Alt + ↖ )執行Jump to navigation bar的操做,咱們就能感覺到它的威力——利用它咱們能夠跳轉至項目的每一處,能夠建立和修改任一文件以及其餘許許多多有意義的事情。測試
值得一提的是,即使在導航欄隱藏時,咱們也能夠執行此操做。url
你可能會想:Go to a class這麼一個簡單的操做有什麼好說的?也許你已經知道Ctrl+N(OS X中爲Cmd+N)可以在類之間跳轉,但不見得你就知道這個功能比它看起來強大得多。除了各家IDE都支持的簡單通配符、駝峯式命名、包名前綴之外,IntelliJ還能夠將中間名匹配(middle name matching)、行號後綴、快速文檔、定義菜單(definition popups)等方法引入這一功能:
默認狀況下,Go to a class功能的搜索僅會在你的項目中執行。若沒有匹配項,再按一下快捷鍵,搜索將在項目引用的庫中展開。
在IntelliJ中,咱們徹底能夠不借用鼠標便輕易地執行類間跳轉:當菜單出現的時候,輸入或修改查詢語句,最後利用鍵盤的上下鍵選擇目標便可。若你曾試圖在其餘IDE中嘗試這種方法,你確定知道我在說什麼。
當你須要打開項目中特定的文件,利用快捷鍵Ctrl+Shift+N(OS X中爲Cmd + Shift + N )是個不二的選擇。除了實現其基本的功能外,你還能夠藉由通配符、駝峯式命名以及目錄名前綴等方法進行搜索。
終於要介紹Go to…特性家族裏的最後一位重要成員了——Go to a symbol。 經過快捷鍵Ctrl + Shift + Alt + N (OS X爲Cmd + Shift + Alt + N ),便能在不用全文搜索(full-text search)的狀況下導航到指定的符號處。由於IntelliJ會一直維護項目及庫中全部符號的索引,因此不管項目規模多麼龐大,它依舊能夠在經過相應 表達式在幾秒內輕易地找到匹配的方法或字段。
若是須要在特定的工具窗口(如Project/Changes View,甚至Explorer/Finder)中選定正在編輯的文件,那麼經過快捷鍵Alt+F1來使用Select in…的功能是再方便不過了。
IntelliJ的大多數工具窗口都分配了簡單的快捷鍵組合。經過快捷 鍵,你便能快速呼出對應的工具窗口並使其得到焦點。在工具窗口得到焦點時再按一次快捷鍵,工具窗口將會隱藏,你便能返回編輯器上工做啦。這種方法實在是方 便,更重要的是,它讓你徹底擺脫了鼠標——每當須要某一個特定的工具窗口或者想返回編輯器,按快捷鍵就行了。
確保你至少能記住如下幾個快捷鍵:
不少人都不知道IntelliJ的一個小竅門——按下Escape就能返回編輯器。當你使用這種方法時,此前被呼出的工具窗口仍保持其可視狀態。固然啦,如 果你不想看到這些窗口,按下快捷鍵Ctrl + Alt + F12(OS X爲Cmd+ Alt + F12)便可。
(譯註: 在本地測試時該快捷鍵對應File Path,而Shift+F12纔是正確的快捷鍵)
當你正在編寫代碼,特別是想同時確保代碼順心如意,經常使用的導航功能是什麼呢?固然是在類和對應的單元測試中來回切換啦。IntelliJ能夠識別每個類所關聯的測試,而且提供Go to a test的工能。按下Ctrl + Shift + T (OS X 爲Cmd + Shift + T),便能在它們之間來去自如:
若是在使用這一功能的類沒有相關聯的測試,則IntelliJ會好心地幫你生成一個。
另 一個常見的行爲是,你會爲了某個類或者其某個方法,須要瀏覽該類的層級結構。在大多數IDE中,你能看到一個圖標出如今與方法定義處於同一行的 gutter裏(譯註:gutter即編輯器左側的窄條,可見特性21)。經過點擊這個圖標,就導航到了父類(或接口)中該方法定義的位置。除此以 外,IntelliJ首創了一個叫Super Method的功能,按下快捷鍵Ctrl + U (OS X爲Cmd + U )便可。它在無不借助鼠標的狀況下實現向上跳轉一級。
既然能夠向上跳轉,憑啥不能向下呢?話雖如此,事實上,鮮有 IDE實現了這一功能,所幸IntelliJ就是其中的一個。除了提供跳轉至父類的圖標,IntelliJ一樣提供一個可導航至子類對應方法的定義位置的 圖標,因此,在IntelliJ的世界,可謂「上天入地」(up and down)無所不能。
若是想不用鼠標,並更快地導航至下層,那就使用快捷鍵Ctrl + Alt + B (OS X 爲 Cmd + Alt + B for OS X)調用Implementations來實現吧,它將列出全部實現了當前類的子類讓你挑選:
那要是想查看有關全部實現或者覆寫了當前方法的類的結構圖呢?在IntelliJ中,有一個Method Hierarchy的功能,能夠經過快捷鍵Ctrl + Shift + H (OS X 爲 Cmd + Shift + H )來調用。這個功能讓你能導航至全部符合這一關係的類中:
咱們剛學習了一些在有關方法定義的層級結構中導航的門路。可能在某些時候還要在當前的類(或者說光標所處的類,不管它有多少的方法)的層次結構中使用導航。大多數IDE經過提供單個類或接口的層級結構,以實現這一需求。在IntelliJ裏這種功能稱爲類型層級(Type Hierarchy),其快捷鍵爲Ctrl+H。
如你所見,該功能返回一個樹形結構。有些人可能以爲這種格式難以理解,因此IntelliJ同時提供了另外一個稱爲Diagram popup——快捷鍵爲Ctrl + Alt + U (OS X 爲Cmd + Alt + U)——的功能,以UML圖的方式替代樹形結構來描述給定的類的層級結構:
不用提醒你就能知道,經過它咱們能夠導航到任何由圖形所表示的類或接口中。
除了類和方法定義的層級結構之外,咱們還有一個特殊的導航行爲:在方法調用的層級結構中導航。每個方法會調用不少調用另外一些方法的方法,以此類推。這就是爲何有時你須要導航到被當前方法所調用或者調用了它的方法中去。經過快捷鍵Ctrl + Alt + H來藉助Call Hierarchy功能,即可讓IntelliJ爲你快速地呈現當前方法的調用層級結構:
導航到使用了光標指定的符號的位置,亦是一件常有的事。爲了作到這一點,每一個IDE都會提供一個Find usages的功能。但這個功能的缺點在於,它一般實現得十分「笨重」——它不只要單獨啓動一個長時間運行的進程,還須要建立一個工具窗口來顯示結果。爲此IntelliJ提供了一個輕量級的解決方案——Show usages,其快捷鍵爲Alt + Ctrl + F7 (OS X 爲Cmd + Alt + F7 ):
這個功能以菜單的形式展現結果,而且默認狀況下只在工程級別(Project level)的範圍內運行。若是再調用一次該功能,其運行範圍將擴充至工程和庫級別(Project and libraries level)。
在前面的內容中我介紹瞭如何導航至最近訪問的文件。那麼若是我但願在篩選出最近被編輯過的文件呢?在IntelliJ中只需經過快捷鍵Ctrl + Shift + E (OS X中爲Cmd + Shift + E)調用Recently Edited Files功能便能輕易知足這一需求:
你認爲一個IDE只瞭解項目的文件中最基本的關係(如類的層次結構,測 試覆蓋率,使用狀況等)便夠了嗎?那些特殊的關係呢?按下Ctrl+ Alt + Home (OS X爲Cmd + Alt + Home),便可藉助IntelliJ IDEA 提供的Related symbol的功能,讓你可以得到基於這些特殊關係(如在Sping MVC、Grails、甚至JavaFX應用的views和controllers之間)的導航功能。
既然IntelliJ可以弄清項目中的一些特殊關係,那麼它還具備哪些專用的導航功能呢?若是你是一個Web App開發者,能夠經過輸入與view controller相關聯的URL,調用Go to a symbol功能,快捷地找到它:
IntelliJ的那些數據庫工具也提供特殊的導航行爲。在數據庫工具窗口中,調用Go to a symbol,並鍵入表(table)的名字,便能快速地跳轉至表中:
若是在一個表或者一個列(column)中使用Find usages功能,IntelliJ便將展現全部引用了它的表:
更讓人欣喜若狂的是,IntelliJ能夠根據主鍵的使用狀況,將你導航到其它表中。好比,你能夠要求IDE顯示在其它表中,哪些行引用了當前行的主鍵值:
我 們接着來看看最後一個重要的行爲——經過書籤導航導航至任何你感興趣的位置。IntelliJ提供了很是方便的工具實現這一功能。按下F11,即可將當前 的位置在書籤表中添加(或刪除)。一旦完成添加操做,你便能在gutter裏看到一個相應的圖標。以後,每當想返回保存爲書籤的那個位置,按一下 Shift+F11,而後從列表中選擇便可:
但願這篇文章讓你初步瞭解瞭如何利用IntelliJ強大的導航功能,實如今本身工做的代碼中快速地切換,以保證本身專一於代碼之中。換句話說,若是能讓本身在切換上所花的時間越少,你的生產效率就會越高。
另外,請記住——對本身所使用的IDE瞭解得更多,你的編程生活就會變得更加愜意。