> 有部分內(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)該就可以了。