IntelliJ IDEA 使用技巧匯總

> 有部分內(nèi)容來(lái)自網(wǎng)絡(luò),一般都有注明出處,如若侵權(quán),請(qǐng)聯(lián)系我刪除,謝謝!

> 文章的圖片來(lái)自github的圖床,圖片鏈接存在github圖床(https://raw.githubusercontent.com),該地址可能需要翻墻才能訪問(wèn),所以圖片可能存在加載不成功的情況。

# HOTKEY

## Usage Search(使用查詢(xún))

key | desc

- | -

cmd+opt+F7 | 搜索文件中用法,以彈窗方式顯示

opt+F7 | 全局搜索引用

cmd+shift+F7 | 高亮顯示當(dāng)前代碼域使用到的地方

F3 or shift+F3 | 搜索當(dāng)前文件的模式下,按向下 or F3跳到下一處,按向上 or shift+F3跳到上一處

tab or tab+shift | 在ctrl+shift+f全局搜索的時(shí)候,可以通過(guò)tab和來(lái)移動(dòng)輸入聚焦,可以脫離鼠標(biāo)來(lái)選擇右上角的File mask

## Editing(編輯)

key | desc

- | -

cmd+P | 顯示方法的參數(shù),這個(gè)方法的強(qiáng)大之處在于,展示了參數(shù)之后,在寫(xiě)入傳參的時(shí)候,彈框會(huì)一直存在,讓參數(shù)更加直觀

cmd++ | 展開(kāi)折疊的代碼

cmd+- | 折疊代碼

shift+上下方向鍵 | 有時(shí)候用vim插件的jk上下移動(dòng)太慢了,而且又不能明確知道要用emacsIdeas調(diào)整到哪里,可以用idea自帶的shift+上下方向鍵來(lái)快速上下移動(dòng)代碼

## debug

key | desc

- | -

cmd+shift+F8 | 查看斷點(diǎn)信息

shift+F7 | 智能步入,斷點(diǎn)所在行上有多個(gè)方法調(diào)用,會(huì)彈出進(jìn)入哪個(gè)方法

^+F5 | 重啟debug服務(wù)

cmd+F2 | 終止debug服務(wù)

^+cmd+W | 將Add to Watches綁定快捷鍵,可以快速查看變量或者表達(dá)式的值

## Spring Boot 微服務(wù)

cmd+8 彈出多個(gè)微服務(wù)的啟動(dòng)控制窗口,可以通過(guò)上下左右移動(dòng)快速定位到某個(gè)微服務(wù),通過(guò)快捷鍵^+shiftF10 Runing,或者通過(guò)^+shift+F9 Debuging

## General(通用)

key | desc

- | -

^+cmd+F | 切換全屏模式

^+cmd+C | 清理控制臺(tái)的日志之類(lèi)的,需要再keymap里面設(shè)置Other | Clear All

## Refactoring(重構(gòu))

key | desc

- | -

F5 | 復(fù)制文件到指定包路徑

F6 | 移動(dòng)文件到指定包路徑

opt+cmd+m | 提取代碼為方法

opt+cmd+c | 提出代碼為常量

opt+cmd+v | 提出代碼為變量

opt+cmd+f | 提出代碼為成員變量

opt+cmd+p | 提出代碼為方法的形參

opt+cmd+o | 快速去掉多余的import

## Navigation(導(dǎo)航)

key | desc

- | -

alt+F1 | 跳轉(zhuǎn)到當(dāng)前代碼文件很多相關(guān)的功能(強(qiáng)大)

cmd+u | 前往當(dāng)前光標(biāo)所在方法的父類(lèi)的方法 / 接口定義

cmd+b | 進(jìn)入定義處

cmd+opt+b | 進(jìn)入實(shí)現(xiàn)處

cmd+o | 查詢(xún)當(dāng)前類(lèi)可以繼承實(shí)現(xiàn)的所有方法

cmd+F12 | 展示當(dāng)前文件的結(jié)果大綱(可用于查詢(xún)變量、方法等)

^+shift+B | 跳轉(zhuǎn)到類(lèi)型聲明處,可以直接從類(lèi)變量跳到對(duì)應(yīng)的類(lèi)里面

F12 | 返回前一個(gè)工具窗口

shift+esc | 隱藏當(dāng)前或最后一個(gè)活動(dòng)的窗口,且光標(biāo)進(jìn)入代碼文件窗口

opt+F1 | 顯示當(dāng)前文件選擇目標(biāo)彈出層,彈出層中有很多目標(biāo)可以進(jìn)行選擇(如在代碼編輯窗口可以選擇顯示該文件的 Finder)

?H | 顯示當(dāng)前類(lèi)的層次結(jié)構(gòu)(在類(lèi)的任何地方可以快速跳轉(zhuǎn)到父類(lèi)、父接口、子類(lèi))

^+opt+H | 顯示所有調(diào)用的層次結(jié)構(gòu)

^+h | 顯示類(lèi)的所有子類(lèi)型的相關(guān)內(nèi)容

shift+F4 | 在新窗口打開(kāi)文件

^+F2 | 可以快速跳到idea的菜單欄,然后通過(guò)方向鍵和enter,可以快速進(jìn)行一下菜單欄的操作,這個(gè)快捷鍵適合其他軟件

^+opt+cmd+N | 跳到next method,這個(gè)是我自定義的

^+opt+cmd+P | 跳到previous method,這個(gè)是我自定義的

跳到光標(biāo)所在方法的方法名 | 先^+opt+cmd+N再^+opt+cmd+P,如果是最后一個(gè)方法就反之

# PLUGIN(插件)

## emacsIdeas 最強(qiáng)大沒(méi)有之一

> 注意如果和IdeaVim一同使用的話(huà),類(lèi)似^+W的快捷鍵要更改,不然會(huì)和IdeaVim的屏幕分割快捷鍵沖突了

#### jump

- Plug-ins | emacsIDEAs | AceJumpSelect? ? ? 選中當(dāng)前位置到某個(gè)字符

- Plug-ins | emacsIDEAs | HighlightPrevSymbol 高亮跳到上一個(gè)一樣的字符

- Plug-ins | emacsIDEAs | HighlightNextSymbol 高亮跳到下一個(gè)一樣的字符

#### emacsIdeas copy

- Plug-ins | emacsIDEAs | AceJumpCopy.Block? ? ? 復(fù)制特定代碼塊到當(dāng)前光標(biāo)(可以是函數(shù)里面的整個(gè)形參定義)

- Plug-ins | emacsIDEAs | AceJumpCopy.Line? ? ? ? 復(fù)制特定行到當(dāng)前光標(biāo)

- Plug-ins | emacsIDEAs | AceJumpCopy.Quote? ? ? 復(fù)制特定的引用到當(dāng)前光標(biāo),比如某個(gè)引號(hào)里面的內(nèi)容

- Plug-ins | emacsIDEAs | AceJumpCopy.String? ? ? 復(fù)制特定的代碼到當(dāng)前光標(biāo),一般是某塊前后由空格隔開(kāi)的代碼

- Plug-ins | emacsIDEAs | AceJumpCopy.ToLineEnd? 從當(dāng)前位置復(fù)制到行尾

- Plug-ins | emacsIDEAs | AceJumpCopy.ToLineStart 從當(dāng)前位置復(fù)制到行首

- Plug-ins | emacsIDEAs | AceJumpCopy.Paragraph? 復(fù)制某個(gè)特定段落,比如類(lèi)的某段注釋

- Plug-ins | emacsIDEAs | AceJumpCopy.Group? ? ? 復(fù)制某塊代碼,可以使某個(gè)判斷的條件+整個(gè)花括號(hào){}里面的內(nèi)容

#### emacsIdeas delete

- Plug-ins | emacsIDEAs | AceJumpCut? ? ? ? ? ? ? ? ? 從當(dāng)前位置剪切到某個(gè)位置

- Plug-ins | emacsIDEAs | AceJumpDelete.Block? ? ? ? 刪除特定的代碼塊

- Plug-ins | emacsIDEAs | AceJumpDelete.Line? ? ? ? ? 刪除特定的代碼行

- Plug-ins | emacsIDEAs | AceJumpDelete.Quote? ? ? ? 刪除特定的引用代碼,比如某個(gè)引號(hào)里面的內(nèi)容

- Plug-ins | emacsIDEAs | AceJumpDelete.String? ? ? ? 刪除特定的二個(gè)空格之間的字符

- Plug-ins | emacsIDEAs | AceJumpDelete.Word? ? ? ? ? 刪除特定的某個(gè)變量方法名(緊挨在一起的代碼標(biāo)識(shí))

- Plug-ins | emacsIDEAs | AceJumpDelete.ToLineEnd? ? 從當(dāng)前位置刪除到行尾

- Plug-ins | emacsIDEAs | AceJumpDelete.ToLineStart? 從當(dāng)前位置刪除到行首

- Plug-ins | emacsIDEAs | AceJumpDelete.Paragraph? ? 刪除某個(gè)特定段落,比如類(lèi)的某段注釋

#### emacsIdeas cut

- Plug-ins | emacsIDEAs | AceJumpCut? 從光標(biāo)當(dāng)前位置剪切到某個(gè)位置

#### emacsIdeas more

AceJumpMove模式,各種快捷鍵的變種和上面的一樣.etc.

## ideaVim

yy 復(fù)制當(dāng)值當(dāng)前行,或者選中后y復(fù)制,然后輸入數(shù)字n,再輸入p,代表連續(xù)粘貼n次。

gg 快速移動(dòng)到文件的開(kāi)頭

G? 快速移動(dòng)到文件的結(jié)尾

## CamelCase

opt+shift+u 可以對(duì)字符進(jìn)行駝峰式的不同格式變換,非常實(shí)用。

## Grep Console

安裝該日志插件,控制臺(tái)的日志輸出可以更加直觀,還可以自定義顏色。

## spring assistant(yml或者properties文件編寫(xiě)提示)

編寫(xiě)yml配置文件的時(shí)候,可以自動(dòng)提示,但是這個(gè)自動(dòng)提示貌似自會(huì)提示Spring Boot的基礎(chǔ)配置,如果是在配置中心的話(huà),其他的第三方依賴(lài)配置要在配置中心引入其spring-boot-starter的依賴(lài)才能自動(dòng)提示對(duì)應(yīng)的配置。

***如果對(duì)應(yīng)的依賴(lài)引入了之后還不會(huì)自動(dòng)提示,那就需要再idea的模塊配置里面將自定義的配置文件加入到配置文件的類(lèi)別中,如下圖:***

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/EpjOSE.png)

選擇右邊的第一個(gè)Configuration Files,因?yàn)橥ǔE渲弥行男略龅亩疾粫?huì)是Bootstrap類(lèi)別的配置文件,如下圖,然后點(diǎn)擊下面的綠色按鈕,也就是最后一個(gè)按鈕

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/RWKXhb.png)

再點(diǎn)擊下面的+號(hào),選擇對(duì)一個(gè)的yml或者properties,然后確認(rèn)就ok了。

## RestfulToolkit

這個(gè)插件可以自動(dòng)收集項(xiàng)目的Restful風(fēng)格的接口,還可以在idea里面直接填寫(xiě)參數(shù)調(diào)用接口

## MyBatis Log Plugin

自動(dòng)打印Mybatis的每一個(gè)SQL,有時(shí)候我們要抽取SQL不是很方便

## Free Mybatis plugin

Mapper與Mapper XML映射之間的調(diào)整,方便代碼的跟蹤查看。

而且還可以自動(dòng)通過(guò)Mapper的方法矯正或者生成Mapper.xml的每個(gè)xml節(jié)點(diǎn)

# Others(其他)

## 修改包名要注意的地方

修改了包名之后注意在編譯輸出的目錄要清空之前的老的class,不然可能會(huì)引起意想不到的沖突。

## 有沒(méi)有更加智能化的API注釋查看方法,比如鼠標(biāo)+cmd的方式就完整地將注釋都展示出來(lái)?

ctrl+J

可以搜索keymap需改熱鍵,Quick Documentation

## debug的時(shí)候變量的多種不同的View

在Variables右鍵要跟蹤的變量,可以view text,或者view as 其他類(lèi)型.

## Performance enhancements(性能增加)

idea吃?xún)?nèi)存確實(shí)是有點(diǎn)恐怖,對(duì)于調(diào)大內(nèi)存,網(wǎng)上基本都是說(shuō)調(diào)整idea.vmoptions里面的這三個(gè)參數(shù):

```

-Xms1024m

-Xmx3000m

-XX:ReservedCodeCacheSize=1024m

```

但是我自己是基于2019.02的版本,發(fā)現(xiàn)即使調(diào)整了之后重啟,idea右下角的內(nèi)存顯示還是原來(lái)的Max。

其實(shí)要這樣調(diào)整才能真正生效:

Help->Edit Custom VM Options

打開(kāi)這個(gè)會(huì)發(fā)現(xiàn)里面的配置還是原來(lái)的,在這里更改再重啟,右下角的內(nèi)存Max才會(huì)變大,才能生效。

## cmd+shift+A按第二次的時(shí)候老是換出Terminal

https://intellij-support.jetbrains.com/hc/en-us/articles/360005137400-Cmd-Shift-A-hotkey-opens-Terminal-with-apropos-search-instead-of-the-Find-Action-dialog

## Bug

有時(shí)候會(huì)出現(xiàn)復(fù)制進(jìn)來(lái)的新文件編譯之后沒(méi)有被輸出到target對(duì)應(yīng)的目錄,應(yīng)該是idea潛在的bug,如果點(diǎn)擊重新加載文件索引太慢了,一般重啟一下重新編譯可以解決。

## search(搜索)

全局搜索的時(shí)候記得利用好Scope,比如要搜索某個(gè)模塊,某所最近更改的內(nèi)容,搜索版本控制的所有更改等等。

## Services

cmd+8可以將多個(gè)SpringBoot的服務(wù)(微服務(wù))整一個(gè)打開(kāi)控制,可以結(jié)合其他快捷鍵進(jìn)行啟動(dòng)、重啟和停止,不過(guò)第一次使用需要再右下角的彈框中點(diǎn)擊確認(rèn)。

此外在Spring Cloud多個(gè)微服務(wù)的情況下,還可以將不同的微服務(wù)分組然后統(tǒng)一對(duì)某個(gè)組別進(jìn)行run、debug或者靜默斷點(diǎn)等操作。

## 使用lombok跟蹤bean屬性調(diào)用棧

opt+F7依然可以看到getter和setter的調(diào)用棧。

## SpringBoot Application的熱加載

要在debug模式下,設(shè)置Hot swap classes and update trigger file if failed,就可以自動(dòng)熱加載class了。

## idea的svn的刪除操作

本地刪除之后要在,Locally Deleted Files中點(diǎn)擊Remove from VCS,然后再回來(lái)上面的Default Changelist去執(zhí)行Commit刪除。

# all shortcut

```

新建文件的時(shí)候可以這樣操作來(lái)脫離鼠標(biāo):

cmd+1跳到Project目錄上下移動(dòng)到目標(biāo)目錄,然后cmd+shift+A跳出Action,輸入new+文件類(lèi)型或者手動(dòng)選擇文件類(lèi)型就可以了。

```

```

option+cmd+c 抽取局部字符串為靜態(tài)變量

cmd+shift+方向鍵? 可以控制模態(tài)框的大小,和左右移動(dòng)編輯區(qū)的內(nèi)容

ctrl+j? 展示API文檔

ctrl+shift+F,[words 打鉤可以搜索是否為單詞]

command+D,

commond+F12(file structure)

command+shift+N(search file's name and global)

commond+option+shift+N(search method d variable global)

shirt + option + (向上箭頭)/(向下箭頭)(move codes up or down)

Command + Option + L(Format code)

option+enter(add javadoc)

option+command+b(jump into the class impl)

command+e(recent file)

command+shift+a(search action)

command+number(window tab jump)

shift(ctrl)+command+del(last(next) edit location)

F11,command+F11,ctrl+number(alphabet)(bookmarks)

option+shift+F(add to favorites)

shift+option+U(toggle case)

command+1,esc(switch between file navigate and edit area)

option+F7(find usage)

shift+option+方向(move caret to next word)

command+方向(move to first or end of line)

ctrl+command+G(sellect all occurrences) HOT

F2(Quickly locate the wrong line)

option+command+V(generate locate variable)

shift+command+enter(generate some code)

option+enter(generate some method)

command+R(replace)

shift+F6(rename)

option+command+V(Extract Variable)

option+command+C(Extract static Variable) HOT

option+command+F(Extract field Variable)

option+command+P(Extract field Variable into method)

option+command+M(Extract some code to be a new method)HOT

shift+command+F8(show all breakPoints)

shift+command+V(copy history)

shift+option+command+U(show maven dependencies)

option+command+U(show class inherit) HOT

ctrl+option+H(call method or be called history)

ctrl+N(Generate anything)

ctrl+w(select something)

ctrl+< or > (move up or down next method) HOT

cmd+option+T (surround) HOT

```

# Problem Solution

## 編譯出現(xiàn)莫名其妙的找不到符號(hào)的Error

如果找不到符號(hào)的錯(cuò)誤行數(shù),剛好式同包下的某個(gè)類(lèi)找不到符號(hào)報(bào)錯(cuò),那么可能式idea的類(lèi)編譯順序沖突了,找到報(bào)錯(cuò)行上引用到的類(lèi),先單獨(dú)編譯應(yīng)用到的類(lèi),再編譯報(bào)錯(cuò)的類(lèi),最后編譯整個(gè)項(xiàng)目就可以了。

## 非靜默模式下斷點(diǎn)失效

斷點(diǎn)處提示:idea debug no executable code found

這個(gè)一般是class和idea的代碼不一致導(dǎo)致的。

解決辦法:

1、invalidate Caches/Restart

2、rebuild Project

3、class的輸出路徑正確

4、我自己是因?yàn)閖boss的On 'update' action 被設(shè)置成了Restart Server,熱部署應(yīng)該改為:Update classes and resources

## 某個(gè)jar依賴(lài)沖突問(wèn)題的解決

公司項(xiàng)目中cglib的包依賴(lài)了二個(gè)log4j的包,導(dǎo)致控制臺(tái)啟動(dòng)會(huì)報(bào)錯(cuò)。 刪除項(xiàng)目輸出目錄下的lib,設(shè)置依賴(lài)jar的scope為provided。

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/7vAT8L.png '')

然后重新部署啟動(dòng)就可以了。

## debug啟動(dòng)微服務(wù)莫名其妙卡住的情況

竟然是因?yàn)槲以谀硞€(gè)方法的聲明上打了斷點(diǎn),然后我靜默斷點(diǎn)時(shí)就可以debug啟動(dòng)微服務(wù)了:

![](https://raw.githubusercontent.com/coding-by-feng/oss/master/uPic/Qtfqng.png '')

于是我果斷把斷點(diǎn)去掉,然后再檢查一遍有沒(méi)有打到方法聲明上的斷點(diǎn),全都取消之后重啟debug就可以了。

## 記錄Idea關(guān)于Maven依賴(lài)的一個(gè)致命Bug

> 基于版本2019.3.4

公司的微服務(wù)架構(gòu)的用的Maven管理依賴(lài),關(guān)于流程flowable的的模塊ngbip-flow及其幾個(gè)子模塊我放在一個(gè)單獨(dú)的文件夾下面;

另外的一個(gè)項(xiàng)目也是基于微服務(wù)架構(gòu)依賴(lài)ngbip-flow及其幾個(gè)子模塊,然后由于啟動(dòng)報(bào)了個(gè)莫名其妙的錯(cuò)誤,于是我刪掉了項(xiàng)目對(duì)公司自研的所有依賴(lài),重新引入;

但是這個(gè)時(shí)候idea移動(dòng)將ngbip-flow的幾個(gè)模塊的依賴(lài)強(qiáng)制指向了上面提到的單獨(dú)的文件夾下面的ngbip-flow幾個(gè)子模塊的代碼文件,不走maven去依賴(lài)了,我TM是不同的文件夾(不同的工作區(qū)間啊,打開(kāi)的是不同的idea窗口);

最后的硬核解決方法是,將原來(lái)的單獨(dú)文件夾重命名個(gè)名字,這個(gè)時(shí)候另外的項(xiàng)目一下子就自動(dòng)重新引入ngbip-flow的maven依賴(lài),不會(huì)強(qiáng)制走開(kāi)發(fā)機(jī)的其他文件夾下面的依賴(lài),然后我再把文件夾名字改回來(lái)即可。

## Maven代碼不能指向本地工程module代碼

如果出現(xiàn)idea的Modules已經(jīng)存在,但是代碼不能通過(guò)Maven依賴(lài)到已經(jīng)引入的module時(shí)(此時(shí)Maven管理界面可能會(huì)出現(xiàn)已經(jīng)引入的model的maven可視化沒(méi)有出現(xiàn)),這個(gè)時(shí)候在工程的Modules刪除重新引入應(yīng)該就可以了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容