1. 程式人生 > >Idea Live Template程式碼片段總結

Idea Live Template程式碼片段總結

目錄

Idea Live Template總結

live template是idea中提高效率的利器之一,以前看過一些教程,平時經常在使用,減少了我很多繁複的工作,但是沒有系統的去整理過,最近準備系統的整理下,主要是自己平時用到的和官方文件的說明,如果有不正確的地方。

定義: Live template可以讓你快速、高效、正確的插入平時經常使用的或者自定義的程式碼片段。

一、演示

在開始之前,為了引起大家的興趣,我們先來看下使用live template的演示效果:

上面使用的就是live template,其中有預定義的sout,psvm和fori,還有自定義的todo和log等。可以看到使用live template可以用縮略詞產出設定好的程式碼片段。

二、詳細介紹

2.1 型別

live template一共有三種類型分別是簡單、引數化和環繞型別。

  1. 簡單型別 簡單型別就是固定的程式碼片段,當通過縮略詞展開的時候,會在原始碼中展開。如最簡單和常用的pdvm展開就是main函式的定義。
  2. 引數型別 引數型別就是程式碼片段中帶有引數的模板,引數用$界定,如引數MY,這位$MY$,引數型別非常有用,我們自定義的模板很多都會用到引數,等會再設定中在進行講解。
  3. 環繞型別 環繞模板指的是那種包裹程式碼塊的模板,比如try catch,還有下面演示的callable語句。 三種類型的演示如下:

2.2設定(win預設快捷鍵win+alt+s)

路徑如下圖箭頭1處:

如圖中所示,iterations是idea自帶的group,fori是縮略詞,顧名思義這個組是針對迭代等操作的。 在使用時我們可以輸入10.fori,list.fori或者直接輸入fori然後按tab鍵(箭頭7處)插入程式碼。idea會根據上下文生成不同的程式碼片段,如10.fori直接生成了“for (int i = 0; i < 10; i++) {”,而直接輸入fori則是“for (int i = 0; i < ; i++) {”,注意此時10沒有自動生成需要你手動輸入。 我們可以點選2處新建自己的template,template的縮略詞在同一group內不能重複,所以為了不和自帶的鍵重複我們最好新建自己的一個group比如MY,不同的group中的縮略詞可以重複。箭頭5是描述用來助記的。 我們來自定義一個如下圖:

圖中是一個非常常用的輸入,根據類名來生成log靜態變數。你可以看到用$包裹的字元,這個就是上面介紹的引數型別,在生成的程式碼片段中,如果要輸出$,需要用$轉義,即輸出$則在程式碼片段中輸入$$。系統自帶兩個預定義的只讀變數,$END$和$SELECTION$,$END$代表程式碼片段展開後游標最終停留的位置(如果有使用者自定義變數且需要使用者輸入的話則會一次停留在使用者變數處),預設如果不寫$END$游標會停留在最後,如果加和不加效果是一樣的。$SELECTION$代表的是你用游標選中的所有字元,屬於環繞型別,等會用例子會很明白。使用者變數需要我們賦值,點選edit variables,在箭頭2處進行編輯。可以輸入兩種,一種是直接輸入字串(需要用雙引號包裹)用的比較少因為是寫死的,另一種是idea的預定義函式(即通過下拉選單選擇),比如這裡就是取類名。idea有很多預定義的函式,比如日期,行數,方法名,作者等等。一般用到這些預定義的函式就已經足夠了,但是有時複雜的輸出,就需要使用groovy指令碼(下拉選單groovyScript,這裡需要用到的語法很簡單)來進行。比如輸入方法的所有引數,如下圖:

我自定義了一個info(程式碼片段:"$CLASS$.$METHOD$ linenum:$LINE$, param:{$PARAM$} info:$MY$"$END$),輸出了類名、方法名、行數和引數,這些資訊在記錄日誌的時候非常有必要。其中$PARAM$變數就用到了指令碼。我們來看下

// methodParameters是預定義函式,其中雙引號裡的就是指令碼,_1佔位符只帶methodParameters引數
groovyScript("_1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') ", methodParameters())

關於備份和分享:live template檔案儲存在“{user}\{version}\config\templates”,user是指使用者目錄,version是idea目錄,如我的目錄就是C:\Users\chen.IntelliJIdea2017.3\config\templates,其中的檔名以group為名字。也可以在在File->Export Settings對話方塊中選中live template可以儲存配置。 說明:在設定變數的值時有一列是Skip if define,這一列的意思是,如果有值了是否跳過(即游標是否停留),游標停留的位置是變數對話方塊中的順序來定的,可以用右邊的箭頭排序。如果所有的變數填充完了便會跳到$END$變數的位置,如果沒有定義$END$則跳到程式碼片段結尾。

2.3 快捷鍵

win平臺預設的快捷鍵主要是三個ctrl+j(insert live template)、ctrl+alt+j(sround with live template)和ctrl+alt+t(sround with)。

快捷鍵是live template中經常需要用到的,所以需要記住。由於每個平臺不一樣,也有可能有人修改了快捷鍵,所以我用括號註明了快捷鍵對應的名字,如果你的idea該快捷鍵不生效可以直接按圖中搜索名字。

  • ctrl+j:插入普通的live template
  • ctrl+alt+j:插入包裹的live template
  • ctrl+alt+t:插入包裹的程式碼片段,這個包含了ctrl+alt+j但是又包含一些系統自帶的語句塊,比如if,while和for等等。

這裡就需要重點介紹下包裹的程式碼片段,其實就是指的你用游標選中的程式碼。使用這種程式碼片段需要我們用游標去選擇然後輸入快捷鍵ctrl+alt+t或者ctrl+alt+j選中需要的使用的縮略詞。在自定義的程式碼片段中有個自帶的$SELECTION$指的就是你用游標選中的程式碼,在插入程式碼片段時,就會將你選中的程式碼插入到$SELECTION$。讓我們在實現一個帶包裹程式碼片段的sloge,設定如下:

注意設定中箭頭的位置,選擇java,表示快捷鍵應用的上下文。 使用方法: 用滑鼠選中程式碼,輸入ctrl+alt+j或者ctrl+alt+t選擇sloge。如下圖:

2.4 實戰

我自定義了幾個非常常用的程式碼片段,分別是

  1. "info":輸出除錯資訊
// 程式碼片段   
"$CLASS$.$METHOD$  linenum:$LINE$, param:{$PARAM$} info:$MY$"$END$   
// 變數定義     
$CLASS$:className()      
$METHOD$:methodName()   
$LINE$:lineNumber()   
$PARAM$:groovyScript("_1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') ", methodParameters())   
  1. "fen":分割線的註釋
// 程式碼片段 
/* ---------------- $E$ -------------- */$END$
  1. "log":定義日誌常量
// 程式碼片段 
private static final Logger logger= LoggerFactory.getLogger($CLASS$.class);
// 變數定義     
$CLASS$:className()  
  1. "zhushi":帶名字和日期的註釋
// 程式碼片段 
// comment --$USER$-- $D$ ------>$ANNOTATION$
// 變數定義     
$USER$:"chenfangzhi"    
date("YYYY-MM-DD hh:mm:ss")
  1. "todo":todo註釋
// 程式碼片段 
// todoBy$USER$ ---- $D$ ------>$TODO$
// 變數定義     
$USER$:"chenfangzhi"    
date("YYYY-MM-DD hh:mm:ss")

說明:todo的作用我就不講解了,這裡的第4和第5項可能很像,有很多地方需要標註是誰操作的,現在的專案很多都是多人開發,如果都是使用預設的todo,就會很混亂,這時候我們就需要自己來定義屬於自己的todo註釋,這時候就需要帶上名字。程式碼片段可以自己定義,可以同時帶上todo和名字,這樣在檢視todo列表的時候就可以進行篩選。如下圖:

圖上有兩個todo,在todo列表中可以點選箭頭2處的過濾器篩選自己想要的看到的型別。我就是直接看chen這個型別。2處有個Edit Filter可以編輯過濾型別,很簡單的正則匹配。

這篇文章就總結到這裡,希望能夠對你有所幫助!