用了 Intellij idea 這些插件和高效配置後,寫代碼快得飛起來,再也不用 996 加班了

0. 背景

作爲一個 Java 程序員,我相信,絕大多數同學日常都是用 idea 來寫代碼。

Idea 作爲宇宙第一 Java IDE,提供了豐富、強大的功能,可以讓你寫 Java 代碼快得飛起來。

遺憾的是,很多人都不知道怎麼開啓 idea 隱藏的強大功能。下面博主將帶你一起,探究 idea 背後那些強大到逆天的功能。

特別說明:

本文所有實操基於 Mac OSX 系統,其他操作系統(如 Windows,Linux 等)沒有實踐過,不做講解。

非特別說明:

雖然文章標題有點『標題黨』的嫌疑,但是內容絕對不是標題黨文章,乾貨滿滿,請耐心往下看,看完沒收穫直接來北京打我!

1. ToC(目錄)

本文將從以下幾個方面,展開講解:

  • keymap
  • 常用插件
  • 高效配置
  • 超好用的快捷鍵
  • 神器:Postfix
  • 終極神器:Live Template

2. keymap

keymap,就是 idea 的快捷鍵配置方案,本身沒有太多的內容,之所以放到最前面,是因爲後續的講解,很大程度上都依賴於 keymap。

建議將 keymap 設置爲默認的,比如 Mac 下默認的 keymap 就是 Mac OS X 10.5 +。

這樣當你想使用某個快捷鍵而 Google 時,多數時候,找到的答案都使用的是默認的快捷鍵方案,不然的話,別人的快捷鍵你不一定適用。

3. 常用插件

接下來爲大家推薦一些常用的插件,有了這些插件的加持,會讓你的工作事半功倍。

爲了方便大家索引,先把推薦的插件列到下面:

  • Lombok
  • Key Promoter X
  • Alibaba Java Coding Guide
  • CamelCase
  • GenerateAllSetter
  • Codota AI Autocomplete
  • GsonFormat
  • Grep Console
  • MavenHelper
  • RestfulToolKit
  • RainbowBrackets
  • Mybatis Plugin

下面將逐一介紹這些常用的插件。

3.1 Lombok

插件官網:https://plugins.jetbrains.com/plugin/6317-lombok

這個插件,相信不用多做解釋,寫過 Java 的同學都知道,JavaBean 代碼裏有一堆的 set/get,tostring 等方法,非常臃腫。有了 Lombok 之後,再也不用寫這些臃腫的代碼了。

3.2 Key Promoter X

插件官網:https://plugins.jetbrains.com/plugin/9792-key-promoter-x

這個插件的作用是告訴你,你做的某個操作,有哪些快捷鍵可以代替。

有些時候,我們想要做某件事情,比如我想打開 idea 自帶的 terminal,但是我並不知道有快捷鍵可以用,於是我只能傻乎乎的用鼠標去點開 terminal。

有了這個插件後,當你用鼠標去點 terminal 時,右下角會有個彈窗提示,告訴你,其實你沒必要用鼠標去點,直接使用快捷鍵 Alt + F12 就可以了,如下圖:

file

怎麼樣,是不是很貼心!

3.3 Alibaba Java Coding Guide

插件官網:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines

這個插件,也不做過多解釋。阿里巴巴官方推出了 Java 開發手冊,這個插件就是檢查你的代碼是否符合手冊規範的,直接安裝吧,相信阿里巴巴!

舉個簡單的例子,當我要獲取當前時間戳的時候,我這麼寫:long time1 = new Date().getTime(),這個時候,它就會有報錯提示,告訴你直接使用 long time2 = System.currentTimeMillis()
file

怎麼樣,是不是很智能,又學到了一招吧!

3.4 CamelCase

插件官網:https://plugins.jetbrains.com/plugin/7160-camelcase

這個插件的作用是對字符串做格式上的轉化: kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case 等。

典型的應用場景是,比如我們數據庫裏面的字段,用的是下劃線的格式,但是 Java 裏面的字段,用的是駝峯的格式。

我們怎麼保證不會因爲手殘導致數據庫字段和 Java 字段對不上呢?比如數據庫字段是 your_name,一不小心 Java 裏寫成了 youName。

當你遇到問題的時候,估計查到哭都查不出來,Java 裏面的字段少了個 'r'。

這種情況下,CamelCase 插件就派上用場了。使用快捷鍵 Alt + Shift + u,就可以在各種格式之間切換了,很容易就可以把 your_name 變成 yourName。

如下所示:
file

當然,鑑於多數情況下,Java 不存在 kebab-case/space case 即 中劃線/空格 連接方式,你還可以在配置中設置,格式切換時去掉他們,這樣切換時,按 Alt + Shift + u 的次數就可以少些,配置方法如下:
file

3.5 GenerateAllSetter

插件官網:https://plugins.jetbrains.com/plugin/9360-generateallsetter

這絕對是一個特別值得推薦的插件,能夠 save your life !

在我們寫代碼的時候,經常會有各種 dto 之間的轉化,比如從數據庫的 User 轉化爲前端的 UserVO。

如果是你自己寫,先不說寫一堆 get/set 累不累,最關鍵的是,我怕寫漏了某個字段!比如 User 有 10 個字段,最後到 UserVO 只有 9 個了,哭都沒地方哭!

總不能一個個數吧?這時候 GenerateAllSetter 就出來拯救你了!他可以自動的幫你生成 UserVO 所有的 set 方法,更智能的是,如果 UserVO 和 User 字段名一樣,它還會自動幫你生成 get!如下圖所示:
file

當我需要將 User 轉化爲 UserVO 時,在我寫好方法聲明後,按下 Alt + Enter,選中 Generate setter getter converter,他就自動幫我寫好轉化的代碼了!

怎麼樣,是不是 6 得飛起,媽媽再也不用擔心我寫漏字段了!

題外話:

可能有些人會有疑問,不就是個 DTO 轉化嗎?我用 BeanUtils 等工具不香嗎?還真是不香,這玩意有很多坑,性能是一方面,關鍵是當字段名不一樣時,很難察覺到

3.6 Codota AI Autocomplete

插件官網:https://plugins.jetbrains.com/plugin/7638-codota-ai-autocomplete-for-java-and-javascript

關於 AI 插件,目前我就推薦這一個,確實比較強大(好多 AI 插件,名曰人工智能,其實人工智障,還卡得要死)。貼一個 gif 大家感受下:
file

當你想初始化一個 List 的時候,再你敲完 List 後,你就可以發現,後面的 users = new ArrayList<>(); 就有智能提示了,都不用敲了。

當然上面舉的例子只是 Codota 很小的一個智能提示,其他更多留給大家探索。

總之,很多時候,它的智能提示很強大,能省去你不少時間,省得你一個個敲代碼了!

3.7 GsonFormat

插件官網:https://plugins.jetbrains.com/plugin/7654-gsonformat

這個插件的作用,就是根據 json 字符串,自動生成 Java bean。先放個官網的 gif 吧:
file

這裏使用的快捷鍵是:Alt + s。

這裏需要注意的一點是,gsonformat 插件支持自定義 json 反序列化庫,比如 jackson,gson 等,可以在 setting 裏面設置,如下圖:
file

3.8 Grep Console

插件官網:https://plugins.jetbrains.com/plugin/7125-grep-console

這個插件的作用是對 idea 默認的 Console(控制檯)做增強,比如默認的控制檯輸出的日誌,不管日誌級別是什麼,都是沒有顏色區分的。
有了這個插件後,ERROR、WARN 等不同級別的日誌,會展示成不同的顏色,方便我們一眼就看出來有沒有錯誤日誌等。

默認的配色方案如下:
file

具體的顏色配置以及更多的功能,可以參考插件官網。

3.9 Maven Helper

插件官網:https://plugins.jetbrains.com/plugin/7179-maven-helper

平時我們的 maven 項目,會遇到一些依賴衝突的問題,比較難以排查和定位。有了這個插件後,能夠方便的顯示出來有哪些依賴衝突,而且還可以自動加上 exclude,操作界面如下圖:
file

3.10 RestfulToolKit

插件官網:https://plugins.jetbrains.com/plugin/10292-restfultoolkit

這個插件的作用是,幫助我們快速導航到指定 url 請求路徑的 controller 方法。平時我們的項目會寫大量的 controller 以及方法,來處理不同的 url 請求。
但是當代碼多了以後,很難找到某個 url 是哪個方法處理的,有了這個插件,就可以快速根據 url 導航到具體的方法。

file

快捷鍵是 cmd + \。

3.11 Rainbow Brackets

插件官網:https://plugins.jetbrains.com/plugin/10080-rainbow-brackets

這是一款提升 idea 顏值的插件。我們寫的代碼,經常會有很多嵌套的括號,比如 get1(get2(get3())),這麼多的括號嵌套,而且顏色都還一樣,會看得人眼花繚亂。有了這個插件,會給每一對括號都顯示上不同的顏色,增加顏值的同時,也較方便的看出哪些括號是一對:
file

好了,到這裏,推薦的常用插件就介紹完了。大家可以根據需要,自由安裝哪些插件。記住:插件雖好,可不要貪杯哦!

如果你也有好用的插件推薦,歡迎聯繫我,一起探討學習!

4. 高效配置

Idea 確實是一款非常非常優秀的 Java IDE。所謂好馬還得好鞍配,下面介紹的一些高校配置,可以讓你使用 idea 的時候,更舒適、更高效!

4.1 import 自動導入包和刪除無用的 import

設置路徑:Editor -> General -> Auto Import。
勾選其中的 add on the fly 和 optimize on the fly,如下圖:
file

4.2 避免 import *

默認情況下,當 import 同一個包的 class 超過 5 個後,idea 會替換成 import *。但是通常我們不建議這樣寫,遵循的原則就是使用哪些就明確寫引用哪些!

設置路徑:Editor -> Code Style -> Java -> Imports。
將 Class count to use import with 、Names count to use static import with * 都設置爲 999(默認都是 5),如下圖:
file

4.3 保存文件時自動去掉末尾空格

設置路徑:Editor -> General -> Other。
Strip trailing space on Save 選 All,如下圖:
file

4.4 智能提示不區分大小寫

設置路徑:Editor -> General -> code completion。
取消勾選 match case,如下圖:
file

5. 超好用的快捷鍵

這一章節,將推薦一些超好用的快捷鍵。有了這些快捷鍵的加持,不僅能夠節省你大量的時間,還能讓你寫出更優秀的代碼!

5.1 萬能提示神器:Alt + Enter

如果你只想記住一個快捷鍵的話,我推薦這個!Alt + Enter 是一個萬能提示器,可以用說是好用到爆炸💥!

只要 idea 有標紅、標黃或標灰的地方,你按下 Alt + Enter,基本上都能夠自動修復。

舉個簡單的例子,我的這個方法有多餘的參數s2,idea 有置灰提示:
file

它告訴我s2 沒有用到,那麼我怎麼安全刪除這個s2 呢(直接刪除的話,調用的地方會報錯)?這時候,你只需選中s2,然後按下 Alt + Enter,就會發現有提示:
Safe delete s2,然後就可以安全的刪除 s2了,包括調用的地方。下面是動圖:
file

結合前面的 GenerateAllSetter 插件,當我們 new 一個對象後,如果想生成這個對象所有的 setter 方法,也可以用 Alt + Enter:
選中變量名,按下 Alt + Enter,選擇 Generate all setter 即可,如下圖:
file

上面演示的只是 Alt + Enter 強大功能的冰山一角,更多特性留給大家探索,建議大家有事沒事多按按 Alt + Enter ,說不定會有意外收穫。

5.2 Tab 自動補全

這個功能就是用 idea 提示的候選項,替換你當前編輯的內容。

這麼說可能有點抽象,我們來舉個例子,假設我有下面的代碼:

private static String get1(String s1) {
	return  return s1.toLowerCase().trim();;
}

我現在想把 toLowerCase 換成 toUpperCase,這時候我的光標在 s1 後面,如果我們直接敲 .touper... 然後回車,你回發現,toLowerCase並沒有被替換,而是被移動到了 toUpperCase() 後面,然後你還得手動去刪除 toLowerCase(),如下動圖:
file

但是,如果你敲完 .touper 後,不是回車而是按 Tab,那麼 idea 就會用 toUpperCase() 直接替換 toLowerCase():
file

這次,沒有多餘的 toLowerCase() 了,不用手動去刪除了!

5.3 自動生成代碼:Cmd + N

按下Cmd + N 後,有提示可以自動生成代碼,如getter/setter/toString 等。

5.4 智能結束當前語句:Cmd + Shift + Enter

按下 Cmd + Shift + Enter 後,可以智能結束當前語句,比如自動給行尾加上分號,自動給 if 加上括號等,可以自己多嘗試下。

5.5 文件導航快捷鍵

  • Cmd + O:打開類
  • 雙擊Shift:打開任意文件
  • Cmd + E:最近打開文件列表
  • Auto scroll from/to source:左側文件列表與右側Tab聯動

6. 神器:Postfix

Postfix 可謂是 idea 隱藏的一大神技!Postfix 簡單易用,但是功能強大,關鍵是一點也不復雜。相信學會了 postfix 後,你會後悔怎麼沒有早點 get 到這項技能。好了,廢話不多說,我們直接開始。

我們來舉個例子,假設現在需要寫一個 for 循環,依次打印 [0, 100) 這個 100 個數,那麼代碼如下:

	public static void main(String[] args) {
			for (int i = 0; i < 100; i++) {
					System.out.println(i);
			}
	}

代碼本身是比較簡單的,關鍵是上面的 for 循環代碼是怎麼寫出來的。我們有兩種方式:挨個敲出來 和 用 postfix。

我們用動圖來分別展示下這兩種方式:

  • 挨個敲出來
    file

  • 用 postfix
    file

怎麼樣?用postfix,寫 for 循環是不是很快!(中間用到 sout 縮寫是後面 LiveTemplate 要講的)。使用方法也很簡單,只需要在寫完 100 後按下 ".",idea 就自動出現提示了!

Postfix,正如其名,就是在後面按下 ".",然後出現相應的提示,這些提示是 idea 默認自帶的,不需要任何配置,開箱即用!

遺憾的是,idea 的 postfix 支持的功能是固定的,不能自定義,我們可以在 Editor -> General -> Postfix Comletion 中查看全部的 postfix 功能,如下圖:
file

再來幾個動圖演示下:

  • 快速寫 if (obj == null) 和 if (obj != null) :
    file

這裏使用的是 .null 和 .nn postfix。

  • 調用方法並快速聲明、賦值給變量
    file

可以看到,我們不需要先寫變量聲明,然後被方法調用賦值,可以使用 .var 直接一步到位。

關於其他的 postfix,留給大家探索!

7 終極神器:Live Template

上一章講的 postfix,可以說是很強大了,可以提升不少寫代碼的速度。但是還是有點遺憾:postfix 畢竟數量有限,而且不是所有情況下都能使用。

那麼接下來要講的 LiveTemplate 就可以說是終極大殺招了,可以極大提升寫代碼的速度!

備註:

很多同學可能會簡單的以爲 LiveTemplate 不就是個代碼模板嗎?類似於其他代碼編輯器裏面的 Code Snippet ?如果你以爲只有這點功能,那你真是小看了 Live Template。

下面將由淺入深講解 Live Template。

7.1 添加 Live Template

我們經常在 Java 裏面寫 main 方法,也經常用 System.out.println() 等來輸出。
你會發現,每次寫這些很麻煩,有一大堆代碼要敲,那麼有沒有簡單快捷的方式呢?答案就是 LiveTemplate。

idea 自帶的 main、sout 關鍵字,就可以幫你實現上面的功能,我們通過一個動圖來展示下:
file

如果你也想通過一些關鍵字,來生成一段代碼,那麼你可以添加自定義 Live Template。比如我們寫單元測試時,需要寫一個 test 方法,如下:

    @Test
    public void test() {
        
    }

我不想每次都寫這麼一大堆,我想輸入 pvt 時,他能自動生成這個方法。下面我就演示下如何添加 Live Template 來實現這個功能。

步驟如下:

  1. 在 Editor -> Live Templates 頁面,點擊右上角的 +,選擇 2. Template Group,創建一個組,如下圖:
    file

輸入你想要取的組名,比我我這裏叫 demo。

  1. 選中你剛纔創建的 demo 組,再次點擊右上角的 +,選擇 1. Live Template,創建一個 Live Template,
    file

點完後,會出現如下頁面,需要你配置下:
file

一共有 5 個關鍵點,我都標出來了:

  • 1 觸發關鍵字,這裏寫 pvt,也就是說當你寫下 pvt 的時候,就會有相應提示;
  • 2 描述,這裏寫上你這個 pvt 的描述,方便提示的時候知道這個縮寫是幹什麼的;
  • 3 這裏就是要自動生成的代碼,我們這裏寫上 junit test 的模板代碼;注意 $END$ 是說生成代碼後,光標會落到這裏;
  • 4 推薦生成代碼後,自動格式化下;
  • 5 這裏比較關鍵,需要你配置下這個縮寫的生效範圍,因爲 idea 不止可以寫 java,還可以寫 kotlin, groovy, js 等,我們一般勾選 Java 即可,如下圖:
    file

然後,你就可以使用 pvt 這個縮寫來生成代碼了,如下圖:
file

7.2 Live Template 進階使用:變量和 groovy 腳本

上面說過,Live Template 不僅僅是用縮寫去生成代碼,Live Template 還支持定義變量、編寫 groovy 腳本等方式,來增強功能,這個纔是 Live Template 大殺器。

我們直接來看下演示。假設我有如下代碼:

    public void printLogDemo(String s1, int i2, boolean b3) {
        
    }

我現在想把所有的參數都打下日誌,變成下面這樣:

    public void printLogDemo(String s1, int i2, boolean b3) {
        log.info("printLogDemo: s1={}, i2={}, b3={}", s1, i2, b3);
    }

那我是要一個個去敲這些 s1={}, i2={}, b3={} 嗎?如果參數很多呢?是不是很費勁,有了 Live Template 後,我只需要敲 logp 就搞定了,如下動圖:
file

你看,連帶方法名和所有的參數列表,全部一鍵寫好!那麼是如何做到的呢?用到了 Live Template 變量 和 groovy 腳本。

詳細步驟如下:
1 新建一個 Live Template, 取名叫 logp,(步驟參考上一節,略過),如下圖:
file

2 Template Text 中輸入如下

log.info("$METHOD_NAME$: $METHOD_PARAMETERS$", $METHOD_PARAMETERS_VALUES$);
$END$

3 點擊 Edit Variables,上面的 $METHOD_NAME$ 等就是變量,可以配置這些變量的值,配置如下圖:
file

  • METHOD_NAME:選用 idea 自帶的方法 methodName(),即獲取方法名;
  • METHOD_PARAMETERS:是一段 groovy 腳本,如下:
groovyScript("_1.collect { it + '={}' }.join(', ')", methodParameters())
  • METHOD_PARAMETERS_VALUES:是一段 groovy 腳本,如下:
groovyScript("_1.collect { it }.join(', ')", methodParameters())

groovy 腳本里的 methodParameters(),引用的是 idea 自帶的方法,即獲取方法參數列表。

怎麼樣,是不是很強大!Live Template 的更多玩法,留給大家自己去實現。

7.3 福利說明

在我的 idea 中,已經配置好了大量開箱即用的 Live Template,比如:

  • logp:上面解釋的,自動打印參數列表;
  • loge:拋異常時,自動打印參數列表和異常信息,日誌級別爲 ERROR;
  • lstr:自動生成 List
  • aslist:自動生成 Arrays.asList()
  • ifempty:自動生成 if (CollectionUtils.isEmpty($collection$))

還有更多,就不一一列舉了。如果想獲取這些開箱即用的 Live Template, 可以關注我的公衆號,回覆關鍵字 LiveTemplate,就可以了。

發送給你的是 idea setting.zip,包括了 Live Template,以及前文介紹的一些高效配置,都在這個裏面了,你直接導入就可以用了。

8 結束語

這篇文章,可以說是滿滿的乾貨,前前後後好幾個晚上都在加班寫!尤其是動圖部分,爲了做到最好的演示效果,錄製了很多遍!

如果你看完也有點收穫,可以 點贊+關注+分享 三連走一波,謝謝!


我是梅小西,最近在某東南亞電商公司做 DevOps 的相關事情。從本期開始,將陸續分享基於 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。

如果你對 Java 或者 Jenkins 等感興趣,歡迎與我聯繫,微信:wxweven(備註 DevOps),也歡迎關注:

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章