IntelliJ IDEA 導航的 20 大特性

ImportNew發表於2015-04-01

在前面的文章裡,我介紹了IntelliJ IDEA(以下稱IntelliJ)中與程式碼補全及重構相關的特性。今天我將介紹另外一個利器——IntelliJ的導航(Navigation),只要運用得當,它將節約你大把的時間。

作為一個IntelliJ的使用者,你應先明確一點——IntelliJ是用來讓你專注於程式碼的工具。只有這樣我們才能充分利用並享受它的魔力。因此,大部分的時間裡你應該專心工作於程式碼編輯器中,僅把導航當做在不同位置的程式碼間快速切換的好幫手。

本文旨在介紹IntelliJ的導航在工程檔案(project files)、程式碼塊(block of code),及工具視窗(tool window)、編輯器標籤等UI元素上的特性。

1、最近編輯的檔案

如果停下來仔細分析你所有的導航行為(Navigation Pattern),你會意識到,在大部分的時間裡你只固定的一些檔案上工作。這就很好地解釋了為什麼Recent files是IntelliJ使用者的常用特性。一旦能熟練使用它,你就會將其逐漸引入到你大部分的導航操作中去。而使用這一特性只需使用快捷鍵Ctrl+E(OS X為Cmd+E)。

IntelliJ IDEA導航特性Top20

請注意,該功能預設選中最後訪問的文件,所以只需使用回車或者滑鼠單擊便能跳轉到此檔案。如果想減少列表中的候選項,則可以藉助Speed Search 功能——輸入目標檔名中的一部分,列表將僅顯示匹配項。

IntelliJ IDEA導航特性Top20

2、結構選單(Structure popup)

另一個你每天都會做的,就是要在當前開啟的檔案中四處奔波,而檔案有一個共性:它們有自己的檔案結構。例如,一個Java的類檔案含有欄位和方等成員組成的結構。XML和HTML文 件包含一個標籤樹(tags tree)結構。如果想快速的導航到檔案結構的某一部分,那就快按下Ctrl+F12(OS X 上為Cmd+F12)來選 擇想跳轉的地方吧。(同樣的,Speed  Search亦可用於減少列表中的候選項)

IntelliJ IDEA導航特性Top20

有時,你對資訊的需求可能會影響Structure popup中顯示的內容。例如,一個Java類的結構圖可能包含了與其相關的基類或介面的結構資訊。不過在預設情況下,IntelliJ會隱藏它們,如果確實需要,那麼再按一次快捷鍵即可。

IntelliJ會貼心地記錄你在Structure popup中的操作偏好,並在下一次呼叫它時體現出來。

3、跳轉至導航欄

通常,螢幕中只顯示含程式碼的編輯器是一件喜聞樂見的事情。但也有人希望看到專案樹(project tree),因為它有助於理解或者快速修改專案的上下文。 事 實上,在專案樹和編輯器之間切換是IntelliJ中極其容易的事情。不過事實上,專案樹並非最佳選擇。老練的IntelliJ使用者知道一個更好的替代 品:導航欄。新使用者常以為那隻不過是一個麵包屑選單(breadcrumb)罷了,但在有經驗的開發者眼中,這可是一把瑞士軍刀!按下快捷鍵 Alt+Home(OS X為Alt +   )執行Jump to navigation bar的操作,我們就能感受到它的威力——利用它我們可以跳轉至專案的每一處,可以建立和修改任一檔案以及其他許許多多有意義的事情。

IntelliJ IDEA導航特性Top20

值得一提的是,即便在導航欄隱藏時,我們也可以執行此操作。

IntelliJ IDEA導航特性Top20

 4、跳轉至指定類

你可能會想:Go to a class這麼一個簡單的操作有什麼好說的?也許你已經知道Ctrl+N(OS X中為Cmd+N)能夠在類之間跳轉,但不見得你就知道這個功能比它看起來強大得多。除了各家IDE都支援的簡單萬用字元、駝峰式命名、包名字首以外,IntelliJ還可以將中間名匹配(middle name matching)、行號字尾、快速文件、定義選單(definition popups)等方法引入這一功能:

IntelliJ IDEA導航特性Top20

預設情況下,Go to a class功能的搜尋僅會在你的專案中執行。若沒有匹配項,再按一下快捷鍵,搜尋將在專案引用的庫中展開。

在IntelliJ中,我們完全可以不借用滑鼠便輕易地執行類間跳轉:當選單出現的時候,輸入或修改查詢語句,最後利用鍵盤的上下鍵選擇目標即可。若你曾試圖在其他IDE中嘗試這種方法,你肯定知道我在說什麼。

5、跳轉至指定的檔案或目錄

當你需要開啟專案中特定的檔案,利用快捷鍵Ctrl+Shift+N(OS X中為Cmd + Shift + N )是個不二的選擇。除了實現其基本的功能外,你還可以藉由萬用字元、駝峰式命名以及目錄名字首等方法進行搜尋。

IntelliJ IDEA導航特性Top20

6、跳轉至指定符號

終於要介紹Go to…特性家族裡的最後一位重要成員了——Go to a symbol。 通過快捷鍵Ctrl + Shift + Alt + N (OS X為Cmd + Shift + Alt + N ),便能在不用全文搜尋(full-text search)的情況下導航到指定的符號處。因為IntelliJ會一直維護專案及庫中所有符號的索引,所以無論專案規模多麼龐大,它依舊可以在通過相應 表示式在幾秒內輕易地找到匹配的方法或欄位。

IntelliJ IDEA導航特性Top20

7、在…中選定

如果需要在特定的工具視窗(如Project/Changes View,甚至Explorer/Finder)中選定正在編輯的檔案,那麼通過快捷鍵Alt+F1來使用Select in…的功能是再方便不過了。

IntelliJ IDEA導航特性Top20

8、切換至指定的工具視窗

IntelliJ的大多數工具視窗都分配了簡單的快捷鍵組合。通過快捷 鍵,你便能快速撥出對應的工具視窗並使其獲得焦點。在工具視窗獲得焦點時再按一次快捷鍵,工具視窗將會隱藏,你便能返回編輯器上工作啦。這種方法實在是方 便,更重要的是,它讓你完全擺脫了滑鼠——每當需要某一個特定的工具視窗或者想返回編輯器,按快捷鍵就好了。

確保你至少能記住以下幾個快捷鍵:

  • Project工具視窗:Alt + 1 (OS X中為Cmd + 1
  • Changes工具視窗:Alt + 9(OS X中為Cmd + 9
  • Terminal工具視窗:Alt + F12

9、返回編輯器

很多人都不知道IntelliJ的一個小竅門——按下Escape就能返回編輯器。當你使用這種方法時,此前被撥出的工具視窗仍保持其可視狀態。當然啦,如 果你不想看到這些視窗,按下快捷鍵Ctrl + Alt + F12(OS X為Cmd+ Alt + F12)即可。

譯註: 在本地測試時該快捷鍵對應File Path,而Shift+F12才是正確的快捷鍵

10、跳轉至關聯的單元測試

當你正在編寫程式碼,特別是想同時確保程式碼順心如意,常用的導航功能是什麼呢?當然是在類和對應的單元測試中來回切換啦。IntelliJ可以識別每一個類所關聯的測試,並且提供Go to a test的工能。按下Ctrl + Shift + T (OS X 為Cmd + Shift + T),便能在它們之間來去自如:

IntelliJ IDEA導航特性Top20

如果在使用這一功能的類沒有相關聯的測試,則IntelliJ會好心地幫你生成一個。

11、跳至上方的層級

另 一個常見的行為是,你會為了某個類或者其某個方法,需要瀏覽該類的層級結構。在大多數IDE中,你能看到一個圖示出現在與方法定義處於同一行的 gutter裡(譯註:gutter即編輯器左側的窄條,可見特性21)。通過點選這個圖示,就導航到了父類(或介面)中該方法定義的位置。除此以 外,IntelliJ獨創了一個叫Super Method的功能,按下快捷鍵Ctrl + U (OS X為Cmd + U )即可。它在無不借助滑鼠的情況下實現向上跳轉一級。

12、跳至下方的層級

既然可以向上跳轉,憑啥不能向下呢?話雖如此,事實上,鮮有 IDE實現了這一功能,所幸IntelliJ就是其中的一個。除了提供跳轉至父類的圖示,IntelliJ同樣提供一個可導航至子類對應方法的定義位置的 圖示,所以,在IntelliJ的世界,可謂“上天入地”(up and down)無所不能。

IntelliJ IDEA導航特性Top20

如果想不用滑鼠,並更快地導航至下層,那就使用快捷鍵Ctrl + Alt + B (OS X 為 Cmd + Alt + B for OS X)呼叫Implementations來實現吧,它將列出所有實現了當前類的子類讓你挑選:

IntelliJ IDEA導航特性Top20

13、方法層級圖

那要是想檢視有關所有實現或者覆寫了當前方法的類的結構圖呢?在IntelliJ中,有一個Method Hierarchy的功能,可以通過快捷鍵Ctrl + Shift + H (OS X 為 Cmd + Shift + H )來呼叫。這個功能讓你能導航至所有符合這一關係的類中:

IntelliJ IDEA導航特性Top20

14、圖解選單(Diagram popup)

我們剛學習了一些在有關方法定義的層級結構中導航的門路。可能在某些時候還要在當前的類(或者說游標所處的類,無論它有多少的方法)的層次結構中使用導航。大多數IDE通過提供單個類或介面的層級結構,以實現這一需求。在IntelliJ裡這種功能稱為型別層級(Type Hierarchy,其快捷鍵為Ctrl+H

IntelliJ IDEA導航特性Top20

如你所見,該功能返回一個樹形結構。有些人可能覺得這種格式難以理解,所以IntelliJ同時提供了另一個稱為Diagram popup——快捷鍵為Ctrl + Alt + U (OS X 為Cmd + Alt + U)——的功能,以UML圖的方式替代樹形結構來描述給定的類的層級結構:

IntelliJ IDEA導航特性Top20

不用提醒你就能知道,通過它我們可以導航到任何由圖形所表示的類或介面中。

15、方法呼叫層級結構

除了類和方法定義的層級結構以外,我們還有一個特殊的導航行為:在方法呼叫的層級結構中導航。每一個方法會呼叫很多呼叫另一些方法的方法,以此類推。這就是為什麼有時你需要導航到被當前方法所呼叫或者呼叫了它的方法中去。通過快捷鍵Ctrl + Alt + H來藉助Call Hierarchy功能,便可讓IntelliJ為你快速地呈現當前方法的呼叫層級結構:

IntelliJ IDEA導航特性Top20

16、顯示使用情況

導航到使用了游標指定的符號的位置,亦是一件常有的事。為了做到這一點,每個IDE都會提供一個Find usages的功能。但這個功能的缺點在於,它通常實現得十分“笨重”——它不僅要單獨啟動一個長時間執行的程式,還需要建立一個工具視窗來顯示結果。為此IntelliJ提供了一個輕量級的解決方案——Show usages,其快捷鍵為Alt + Ctrl + F7 (OS X 為Cmd + Alt + F7 ):

 IntelliJ IDEA導航特性Top20

這個功能以選單的形式展示結果,並且預設情況下只在工程級別(Project level)的範圍內執行。如果再呼叫一次該功能,其執行範圍將擴充至工程和庫級別(Project and libraries level)。

17、最近編輯的檔案

在前面的內容中我介紹瞭如何導航至最近訪問的檔案。那麼如果我希望在篩選出最近被編輯過的檔案呢?在IntelliJ中只需通過快捷鍵Ctrl + Shift + E (OS X中為Cmd + Shift + E)呼叫Recently Edited Files功能便能輕易滿足這一需求:

IntelliJ IDEA導航特性Top20

18、在檢視與控制器中間導航

你認為一個IDE只瞭解專案的檔案中最基本的關係(如類的層次結構,測 試覆蓋率,使用情況等)便夠了嗎?那些特殊的關係呢?按下Ctrl+ Alt + Home (OS X為Cmd + Alt + Home),即可藉助IntelliJ IDEA 提供的Related symbol的功能,讓你能夠獲得基於這些特殊關係(如在Sping MVC、Grails、甚至JavaFX應用的views和controllers之間)的導航功能。

IntelliJ IDEA導航特性Top20

19、導航至特性檢視控制器(View controller)

既然IntelliJ能夠弄清專案中的一些特殊關係,那麼它還具有哪些專用的導航功能呢?如果你是一個Web App開發者,可以通過輸入與view controller相關聯的URL,呼叫Go to a symbol功能,快捷地找到它:

IntelliJ IDEA導航特性Top20

20、資料庫相關導航模式

IntelliJ的那些資料庫工具也提供特殊的導航行為。在資料庫工具視窗中,呼叫Go to a symbol,並鍵入表(table)的名字,便能快速地跳轉至表中:

IntelliJ IDEA導航特性Top20

如果在一個表或者一個列(column)中使用Find usages功能,IntelliJ便將展示所有引用了它的表:

IntelliJ IDEA導航特性Top20

更讓人欣喜若狂的是,IntelliJ可以根據主鍵的使用情況,將你導航到其它表中。比如,你可以要求IDE顯示在其它表中,哪些行引用了當前行的主鍵值:

IntelliJ IDEA導航特性Top20

21、書籤

我 們接著來看看最後一個重要的行為——通過書籤導航導航至任何你感興趣的位置。IntelliJ提供了非常方便的工具實現這一功能。按下F11,便可將當前 的位置在書籤表中新增(或刪除)。一旦完成新增操作,你便能在gutter裡看到一個相應的圖示。之後,每當想返回儲存為書籤的那個位置,按一下 Shift+F11,然後從列表中選擇即可:

IntelliJ IDEA導航特性Top20

總結

希望這篇文章讓你初步瞭解瞭如何利用IntelliJ強大的導航功能,實現在自己工作的程式碼中快速地切換,以保證自己專注於程式碼之中。換句話說,如果能讓自己在切換上所花的時間越少,你的生產效率就會越高。

另外,請記住——對自己所使用的IDE瞭解得更多,你的程式設計生活就會變得更加愜意。

相關文章