IntelliJ IDEA 使用技巧匯總

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

> 文章的圖片來自github的圖床疚沐,圖片鏈接存在github圖床(https://raw.githubusercontent.com),該地址可能需要翻墻才能訪問潮模,所以圖片可能存在加載不成功的情況亮蛔。

# HOTKEY

## Usage Search(使用查詢)

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全局搜索的時候,可以通過tab和來移動輸入聚焦动遭,可以脫離鼠標(biāo)來選擇右上角的File mask

## Editing(編輯)

key | desc

- | -

cmd+P | 顯示方法的參數(shù)芬探,這個方法的強(qiáng)大之處在于,展示了參數(shù)之后厘惦,在寫入傳參的時候偷仿,彈框會一直存在,讓參數(shù)更加直觀

cmd++ | 展開折疊的代碼

cmd+- | 折疊代碼

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

## debug

key | desc

- | -

cmd+shift+F8 | 查看斷點信息

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

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

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

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

## Spring Boot 微服務(wù)

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

## General(通用)

key | desc

- | -

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

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

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

key | desc

- | -

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

F6 | 移動文件到指定包路徑

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)所在方法的父類的方法 / 接口定義

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

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

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

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

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

F12 | 返回前一個工具窗口

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

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

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

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

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

shift+F4 | 在新窗口打開文件

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

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

^+opt+cmd+P | 跳到previous method天梧,這個是我自定義的

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

# PLUGIN(插件)

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

> 注意如果和IdeaVim一同使用的話,類似^+W的快捷鍵要更改呢岗,不然會和IdeaVim的屏幕分割快捷鍵沖突了

#### jump

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

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

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

#### emacsIdeas copy

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

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

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

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

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

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

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

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

#### emacsIdeas delete

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

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

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

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

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

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

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

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

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

#### emacsIdeas cut

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

#### emacsIdeas more

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

## ideaVim

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

gg 快速移動到文件的開頭

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

## CamelCase

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

## Grep Console

安裝該日志插件,控制臺的日志輸出可以更加直觀硅卢,還可以自定義顏色射窒。

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

編寫yml配置文件的時候,可以自動提示老赤,但是這個自動提示貌似自會提示Spring Boot的基礎(chǔ)配置轮洋,如果是在配置中心的話,其他的第三方依賴配置要在配置中心引入其spring-boot-starter的依賴才能自動提示對應(yīng)的配置抬旺。

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

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

選擇右邊的第一個Configuration Files开财,因為通常配置中心新增的都不會是Bootstrap類別的配置文件汉柒,如下圖,然后點擊下面的綠色按鈕责鳍,也就是最后一個按鈕

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

再點擊下面的+號碾褂,選擇對一個的yml或者properties,然后確認(rèn)就ok了历葛。

## RestfulToolkit

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

## MyBatis Log Plugin

自動打印Mybatis的每一個SQL,有時候我們要抽取SQL不是很方便

## Free Mybatis plugin

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

而且還可以自動通過Mapper的方法矯正或者生成Mapper.xml的每個xml節(jié)點

# Others(其他)

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

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

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

ctrl+J

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

## debug的時候變量的多種不同的View

在Variables右鍵要跟蹤的變量,可以view text稠集,或者view as 其他類型.

## Performance enhancements(性能增加)

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

```

-Xms1024m

-Xmx3000m

-XX:ReservedCodeCacheSize=1024m

```

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

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

Help->Edit Custom VM Options

打開這個會發(fā)現(xiàn)里面的配置還是原來的晦鞋,在這里更改再重啟词裤,右下角的內(nèi)存Max才會變大,才能生效鳖宾。

## cmd+shift+A按第二次的時候老是換出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

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

## search(搜索)

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

## Services

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

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

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

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

## SpringBoot Application的熱加載

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

## idea的svn的刪除操作

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

# all shortcut

```

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

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

```

```

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

cmd+shift+方向鍵? 可以控制模態(tài)框的大小航罗,和左右移動編輯區(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)莫名其妙的找不到符號的Error

如果找不到符號的錯誤行數(shù)粥血,剛好式同包下的某個類找不到符號報錯柏锄,那么可能式idea的類編譯順序沖突了酿箭,找到報錯行上引用到的類,先單獨編譯應(yīng)用到的類趾娃,再編譯報錯的類缭嫡,最后編譯整個項目就可以了。

## 非靜默模式下斷點失效

斷點處提示:idea debug no executable code found

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

解決辦法:

1妇蛀、invalidate Caches/Restart

2、rebuild Project

3笤成、class的輸出路徑正確

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

## 某個jar依賴沖突問題的解決

公司項目中cglib的包依賴了二個log4j的包炕泳,導(dǎo)致控制臺啟動會報錯纵诞。 刪除項目輸出目錄下的lib,設(shè)置依賴jar的scope為provided培遵。

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

然后重新部署啟動就可以了浙芙。

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

竟然是因為我在某個方法的聲明上打了斷點,然后我靜默斷點時就可以debug啟動微服務(wù)了:

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

于是我果斷把斷點去掉籽腕,然后再檢查一遍有沒有打到方法聲明上的斷點嗡呼,全都取消之后重啟debug就可以了。

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

> 基于版本2019.3.4

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

另外的一個項目也是基于微服務(wù)架構(gòu)依賴ngbip-flow及其幾個子模塊,然后由于啟動報了個莫名其妙的錯誤廊宪,于是我刪掉了項目對公司自研的所有依賴矾瘾,重新引入;

但是這個時候idea移動將ngbip-flow的幾個模塊的依賴強(qiáng)制指向了上面提到的單獨的文件夾下面的ngbip-flow幾個子模塊的代碼文件箭启,不走maven去依賴了壕翩,我TM是不同的文件夾(不同的工作區(qū)間啊,打開的是不同的idea窗口)傅寡;

最后的硬核解決方法是放妈,將原來的單獨文件夾重命名個名字,這個時候另外的項目一下子就自動重新引入ngbip-flow的maven依賴荐操,不會強(qiáng)制走開發(fā)機(jī)的其他文件夾下面的依賴芜抒,然后我再把文件夾名字改回來即可。

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屯耸,一起剝皮案震驚了整個濱河市拐迁,隨后出現(xiàn)的幾起案子蹭劈,更是在濱河造成了極大的恐慌,老刑警劉巖线召,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铺韧,死亡現(xiàn)場離奇詭異,居然都是意外死亡缓淹,警方通過查閱死者的電腦和手機(jī)哈打,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讯壶,“玉大人料仗,你說我怎么就攤上這事》茫” “怎么了罢维?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丙挽。 經(jīng)常有香客問我,道長匀借,這世上最難降的妖魔是什么颜阐? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮吓肋,結(jié)果婚禮上凳怨,老公的妹妹穿的比我還像新娘。我一直安慰自己是鬼,他們只是感情好肤舞,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著均蜜,像睡著了一般李剖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囤耳,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天篙顺,我揣著相機(jī)與錄音,去河邊找鬼充择。 笑死德玫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椎麦。 我是一名探鬼主播宰僧,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼观挎!你這毒婦竟也來了琴儿?” 一聲冷哼從身側(cè)響起段化,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凤类,沒想到半個月后穗泵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谜疤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年佃延,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谋梭,靈堂內(nèi)的尸體忽然破棺而出怀泊,到底是詐尸還是另有隱情,我是刑警寧澤缸夹,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響膘螟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碾局,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一荆残、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧净当,春花似錦内斯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忽冻,卻和暖如春真朗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僧诚。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工蜜猾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人振诬。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓蹭睡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赶么。 傳聞我的和親對象是個殘疾皇子肩豁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345