專業(yè)技巧
本指南針對已經(jīng)熟悉其基本功能并希望了解更多的IntelliJ IDEA用戶,如果對IntelliJ IDEA還比較陌生,我們建議您在深入學(xué)習(xí)之前先閱讀 Discover IntelliJ IDEA guide指南。
編碼輔助
輸入信息
如果想了解更多關(guān)于插入符號(hào)的信息,例如它來自哪里或者它的類型是什么,您可以按Ctrl+Q打開快速訪問,此時(shí)可以看到一個(gè)帶有這些詳細(xì)信息的彈出窗口,如果您不需要完整的信息,那么可以使用Type info操作:它只顯示所選表達(dá)式的類型,但不會(huì)占用太多的屏幕空間。
代碼完成大小寫敏感性
默認(rèn)情況下,IntelliJ IDEA代碼完成大小寫敏感性僅影響您鍵入的第一個(gè)字母,這該策略可以在 Editor | General | Code Completion 頁面的設(shè)置對話框(Ctrl+Alt+S)中更改,您可以在其中使IDE對所有字母敏感。
在這里,您還可以在輸入時(shí)關(guān)閉顯示建議選項(xiàng),如果您希望代碼完成彈出框僅在用時(shí)顯示,則這是有意義的。
禁用插入符號(hào)處元素的突出顯示用法
談到您在更好地學(xué)習(xí)了IntelliJ IDEA后可能想要更改的默認(rèn)值,我們不能錯(cuò)過的是將Highlight on Caret Movement設(shè)置在Editor | Code Editing中。如果您知道Ctrl+Shift+F7快捷鍵,并且不喜歡每次移動(dòng)插入符號(hào)時(shí)編輯器中的突出顯示出現(xiàn)或消失,您可以關(guān)閉插入符選項(xiàng)中元素的用法。
CamelHumps
默認(rèn)情況下,當(dāng)您在編輯器中選擇任何內(nèi)容時(shí),IntelliJ IDEA對單詞的大小寫是不敏感的,例如您喜歡根據(jù)CamelCase選擇單詞,而不是選擇整個(gè)單詞,而是選擇它的一部分,這樣就可以在設(shè)置對話框的Editor | General | Smart Keys中啟用此功能。
Hippie completion
IntelliJ IDEA通過Ctrl+Space提供基本的補(bǔ)全,通過Ctrl+Shift+Space提供智能類型匹配的補(bǔ)全,以及通過Ctrl+Shift+Enter提供語句補(bǔ)全。所有這些特性都是基于對代碼結(jié)構(gòu)的實(shí)際理解。然而有時(shí)您可能需要一個(gè)更簡單也更靈活的邏輯,它將提示當(dāng)前文件甚至項(xiàng)目中前面使用的單詞,而不考慮它們的上下文,這個(gè)功能被稱為Hippie completion ,可以通過Alt+/鍵獲得。
Refactorings
Undo refactorings
有了IntelliJ IDEA,您在重構(gòu)代碼時(shí)就不需要擔(dān)心后果,因?yàn)榭梢酝ㄟ^方便的Ctrl+Z快捷鍵調(diào)用undo來撤銷任何事情。
提取字符串片段
IntelliJ IDEA不僅可以重構(gòu)可執(zhí)行代碼還可以重構(gòu)字符串,選擇字符串的任何片段,調(diào)用Extract variable/constant/field/parameter將其作為常量提取并替換它在整個(gè)代碼中的用法。
類型遷移
在重構(gòu)時(shí),通常會(huì)重命名符號(hào),或者提取和移動(dòng)代碼中的語句,然而重構(gòu)不僅僅是這些,例如類型遷移(可通過Ctrl+Shift+F6)允許您更改變量、字段、參數(shù)或方法返回值的類型(int→String、int→Long等),更新依賴代碼,并解決可能的沖突。
Invert boolean
如果IntelliJ IDEA可以自動(dòng)化類型遷移,為什么不能在語義上做同樣的事情呢?如果要反轉(zhuǎn)布爾符號(hào)的所有用法,只需使用反轉(zhuǎn)布爾重構(gòu)。
代碼分析
依存結(jié)構(gòu)
IntelliJ IDEA允許您分析代碼中組件之間的依賴程度,您需要對此保持關(guān)注,因?yàn)楫?dāng)存在太多依賴時(shí),很可能會(huì)導(dǎo)致各種問題。依賴結(jié)構(gòu)操作(可通過Analyze菜單獲得)將幫助您可視化和探索模塊、包和類之間的依賴關(guān)系。
盡管它看起來很復(fù)雜,但它是一個(gè)非常易于使用的工具,只需要選擇一個(gè)類或包,看看它在哪里被使用以及它使用了什么。
結(jié)構(gòu)搜索和更換
結(jié)構(gòu)搜索和替換或SSR,是非常強(qiáng)大的(在您學(xué)會(huì)正確使用它之后),并且可以用于靜態(tài)代碼分析和重構(gòu)自動(dòng)化,簡而言之它允許您搜索代碼中的特定模式,并用參數(shù)化模板替換它們,為此它配備了自己的語言來定義代碼模式,本文將對此進(jìn)行更詳細(xì)的描述:
要訪問此功能,請使用 Edit | Find | Search/Replace Structurally....如果您想創(chuàng)建模板或模式,請進(jìn)入設(shè)置對話框,單擊Editor | Inspections并在常規(guī)節(jié)點(diǎn)下啟用結(jié)構(gòu)搜索檢查:
用戶界面
禁用面包屑和標(biāo)記樹突出顯示
如果使用了大量的HTML和XML并且希望避免不必要的干擾,您可以在Editor | General | Breadcrumbs上讓禁用面包屑和標(biāo)記樹突出顯示。
禁用不必要的gutter圖標(biāo)
Gutter是最左邊的編輯器列,通常顯示一些正在編輯的代碼相關(guān)的有用信息。如果您覺得它有時(shí)太多了,可以設(shè)置對話框(Ctrl+Alt+S)中配置想看到的:Editor | General | Gutter Icons。
Search Everywhere
使用Search Everywhere時(shí)可以在任何地方找到任意的文本片段:在您的代碼、庫、部分UI、設(shè)置(通過在設(shè)置名稱前加上/),甚至動(dòng)作名稱中,如果經(jīng)常使用這個(gè)功能,只需在彈出窗口中按下enter鍵就可以訪問IntelliJ IDEA設(shè)置。例如這里我們正在訪問編輯器設(shè)置:
如果用/plugins開始搜索查詢,您可以打開和關(guān)閉它們:
其他標(biāo)簽包括: /appearance, /system, /inspections, /registry, /intentions, /templates, and /vcs。
Search Everywhere支持縮寫,您可以使用Keymap頁面的設(shè)置對話框分配一個(gè)簡短的文本給任何動(dòng)作。
然后通過輸入以下文本從Search Everywhere調(diào)用此操作:
隱藏編輯器選項(xiàng)卡
當(dāng)您需要關(guān)閉除當(dāng)前選項(xiàng)卡之外的所有編輯器選項(xiàng)卡時(shí),單擊當(dāng)前選項(xiàng)卡上的關(guān)閉按鈕并按住Alt鍵關(guān)閉圖標(biāo):
如果您不想看到編輯器選項(xiàng)卡,請轉(zhuǎn)到編輯器設(shè)置的編輯器選項(xiàng)卡頁面,并在Placement處下拉菜單中選擇None。
在新窗口打開文件
有一個(gè)功能很方便,那就是在項(xiàng)目工具窗口中選擇文件并按Shift+Enter,就可以在新窗中打開文件。
在工具欄添加停止和恢復(fù)按鈕
在導(dǎo)航欄的工具欄中添加Stop按鈕和 Resume按鈕可能會(huì)很方便,您可以通過設(shè)置對話框的Appearance and Behavior | Menus and Toolbars頁面進(jìn)行設(shè)置。
如果您更喜歡使用鼠標(biāo)而不是鍵盤快捷鍵,那么這樣您就不需要打開Debug工具窗口來管理當(dāng)前的調(diào)試會(huì)話。
編輯器
與剪貼板比較
IntelliJ IDEA有一個(gè)內(nèi)置的Diff查看器,用于代碼、jar文件、修訂甚至圖像,要調(diào)用它可以選擇任意一對文件并按Ctrl+D。
如果您選擇了單個(gè)文件,IDE將提示選擇要比較的文件,要快速比較活動(dòng)編輯器與剪貼板,請選擇View | Compare with Clipboard。
從歷史中粘貼
說到剪貼板,IntelliJ IDEA可以跟蹤您放在那里的所有內(nèi)容,任何時(shí)候想要粘貼一個(gè)先前復(fù)制的項(xiàng)目請按Ctrl+Shift+V。
多選
多選是一個(gè)相對較新的、非常強(qiáng)大的編輯器功能,它允許您一次性快速地選擇和編輯多個(gè)(相鄰或不相鄰的)代碼片段。
簡而言之事情是這樣的,您可以從按Alt+J開始(然后IntelliJ IDEA選擇插入符號(hào)),或者可以像往常一樣選擇一些東西。然后按Alt+J, IntelliJ IDEA將向前搜索當(dāng)前文件,直到找到匹配的文本片段,并將其添加到選區(qū)中,您可以再次按Alt+J前進(jìn)或按Alt+Shift+J后退,但請注意當(dāng)搜索到文件的末尾時(shí),它將從文件的開頭重新開始。
選擇完成后,您可以開始編輯所有片段,就像它們是一個(gè)片段一樣。
提示:另一種克隆插入符號(hào)的方法是按Ctrl兩次,然后用箭頭或鼠標(biāo)上下移動(dòng)插入符號(hào)。
Emmet
Emmet是編寫HTML、XML和CSS代碼的好方法,IntelliJ IDEA支持開箱即用:編寫Emmet表達(dá)式并按Tab鍵展開它。
使用Emmet預(yù)覽操作(可通過查找操作或搜索無處不在-所以請確保將其分配給方便的快捷方式)來查看結(jié)果代碼的預(yù)覽。
Regex
Regex功能強(qiáng)大,使用廣泛,但有時(shí)很難正確地編寫它們。IntelliJ IDEA將幫助您檢查代碼中的任何Regex,只需在它上面放置插入符號(hào)并按Alt+Enter來使用檢查Regex:
查找并使用Regex組替換
IntelliJ IDEA幫助Regex的另一個(gè)地方是查找和替換功能,值得知道的是它支持替換表達(dá)式中的捕獲組。
字節(jié)碼查看器
有時(shí)候,看到程序生成的實(shí)際字節(jié)碼是非常深刻的。
在IntelliJ IDEA中,您可以通過View | Show Bytecode來做到這一點(diǎn)。
版本控制
更改
在提交更改對話框中,IntelliJ IDEA提供了執(zhí)行各種操作的功能,其中之一是修正提交,當(dāng)您想要更改上次提交并將當(dāng)前更改加入其中時(shí),它非常有用。
Shelves and patches
Shelves是一個(gè)類似于Git Stash的IDE特性,但是它適用于所有的VCS:當(dāng)您需要暫停當(dāng)前的工作并從存儲(chǔ)庫中取出一些東西來盡快修復(fù)它,然后再繼續(xù)正在做的任何工作時(shí),它都有幫助。該特性在不提交的情況下處理本地更改的文件,因此不會(huì)再丟失更改或匆忙進(jìn)行合并提交。
Patches 允許您將一組更改保存到文本文件中,然后應(yīng)用于代碼,這些文件可以通過電子郵件(或任何其他古老的媒體)傳輸。當(dāng)您的飛機(jī)墜毀在荒島上,或者陷入了沒有可靠寬帶連接的境地,真的需要做點(diǎn)什么時(shí)這個(gè)就派上了用場。
調(diào)試
Non-suspending斷點(diǎn)
有時(shí)您可能希望在不掛起程序的情況下對特定代碼行求值,可以通過使用非掛起斷點(diǎn)來實(shí)現(xiàn)這一點(diǎn),要?jiǎng)?chuàng)建一個(gè)表達(dá)式,只需單擊按住Shift的滑槽,并在Evaluate and log字段中輸入表達(dá)式。
這樣您就可以更改或記錄應(yīng)用程序狀態(tài),而無需在項(xiàng)目代碼中插入額外的語句,這在調(diào)試無法更改的已編譯類時(shí)特別有用。
斷點(diǎn)或字段監(jiān)測點(diǎn)
除了上面提到的操作斷點(diǎn)之外,您還可以使用Field觀察點(diǎn)。當(dāng)訪問與該斷點(diǎn)關(guān)聯(lián)的字段時(shí),該斷點(diǎn)將停止執(zhí)行,要?jiǎng)?chuàng)建字段觀察點(diǎn),只需按住Alt(對于macOS,按Ctrl+Cmd)單擊 gutter。
物體標(biāo)記
當(dāng)您調(diào)試應(yīng)用程序時(shí),IntelliJ IDEA允許用彩色標(biāo)簽標(biāo)記任意對象的特定實(shí)例,以便標(biāo)記對象操作(在Evaluate Expression, Variables或Watches視圖中可用)更容易識(shí)別。
如果您有任何用標(biāo)簽標(biāo)記的實(shí)例,也可以在條件表達(dá)式中使用它:
自定義數(shù)據(jù)呈現(xiàn)器
求值表達(dá)式,變量,手表和內(nèi)聯(lián)調(diào)試器都使用一種標(biāo)準(zhǔn)的方式來呈現(xiàn)變量值,主要基于類的toString實(shí)現(xiàn),并不是每個(gè)人都知道您是可以為任何類定義自己的自定義渲染器的,因此在調(diào)試工具窗口中的上下文菜單中應(yīng)該選擇Customize Data Views。
當(dāng)您正在使用的庫中的一些類沒有提供有意義的toString實(shí)現(xiàn)時(shí),這個(gè)方法特別有用——因此您可以在庫之外自己定義它。
降幀
如果想在調(diào)試時(shí)“回到過去”,您可以通過Drop Frame動(dòng)作來實(shí)現(xiàn),如果錯(cuò)誤走得太遠(yuǎn)這將是一個(gè)很大的幫助,這不會(huì)恢復(fù)應(yīng)用程序的全局狀態(tài),但至少會(huì)讓您通過幀堆棧返回。
強(qiáng)制返回
另一種方法是,如果您希望跳轉(zhuǎn)到未來,并強(qiáng)制從當(dāng)前方法返回而不執(zhí)行任何其他指令就請使用force return操作(要調(diào)用它,請按Ctrl+Shift+A并鍵入操作名稱),如果該方法返回一個(gè)值,則必須指定它。
DCEVM
有時(shí),當(dāng)您對代碼進(jìn)行快速更改時(shí),您可能希望立即看到它們在工作的應(yīng)用程序中的行為。但不幸的是,Java HotSwap VM有很多限制:例如您不能向類添加新方法或字段并執(zhí)行熱插拔;在熱插拔期間唯一可以更改的就是方法體。
幸運(yùn)的是,有一種方法可以改變這種情況,即新的開源項(xiàng)目Dynamic Code Evolution VM,這是對Java HotSwap VM的修改,可以無限地支持在運(yùn)行時(shí)重新加載類。
通過專用插件,在IntelliJ IDEA中使用它就很容易,當(dāng)啟用插件時(shí),IDE將為您的環(huán)境提供下載DCEVM JRE的服務(wù),然后您必須在可選jre列表中選擇它。
更新應(yīng)用程序
如果要在應(yīng)用服務(wù)器(Tomcat、JBoss等)上運(yùn)行應(yīng)用程序,可以通過Ctrl+F10使用Update應(yīng)用程序操作重新加載更改的類和資源嗎?
工具
外部工具
IntelliJ IDEA有許多集成的開發(fā)工具,可以開箱即用。如果您需要的工具沒有集成,但想通過快捷方式使用它,請轉(zhuǎn)到設(shè) Settings | Tools | External Tools并配置如何運(yùn)行此工具。然后就可以通過Tools | External Tools主菜單運(yùn)行這個(gè)工具了。