--- tags: intellij-idea,java,live-template keywords: intellij-idea java live-template weblogName: WordPress postId: 5776 postStatus: draft postDate: 2019-08-11T11:57:01.7573282+08:00 --- # 05.IntelliJ IDEA Live Template(即時樣板)的使用與範例說明(IDEA #5) Live Template,有的工具稱為程式碼片段(Code Snippets)-輸入簡短的**縮寫關鍵字**再按下特定的**驅動按鍵**而擴展為完整程式碼的功能-可以有效提升程式碼的撰寫效率,隨著樣板的累積,能有厚積薄發的效應。 * IDEA預設的驅動按鍵是Tab鍵。 * 完整程式碼裡可插入變數,擴展後不同變數之間按〔Tab〕或〔Shift+Tab〕往前或往後移動。 * 變數欄位移動的順序以變數在【Edit Variables】裡的位置決定 ### 設定Live Template的方法 1. 按下〔Ctrl+Shift+A〕再輸入live template,點擊其Settings項目 2. 按下〔Ctrl+Alt+S〕到【Editor】→【Live Templates】內設定 ### Live Template的基本設定 * Abbriviation: 用來擴展內容的縮寫關鍵字 * Description: 樣板的描述,輸入縮寫部份字串顯示出的視窗會顯示描述 * Template text: 樣板擴展後的內容,可含有變數的文字,變數使用要點如下: - 變數名稱前後為 $: 如$DATE$、$TIME$等 - 內建變數有兩個:$END$與$SELECTION$,$END$是輸入完所有變數後最後游標停留的位置 - 變數可使用 Edit Variable 來定義其初始值 (於Expression欄位以下拉選單選用函數或輸入運算式) - 如 date() 傳回系統日期 - time() 傳回系統時間 - methodName() 傳回當前方法的名稱 - Define/Change:指定適用的場合 ### 常用內建函數 * 完整說明:<https://www.jetbrains.com/help/idea/template-variables.html#predefined_functions> 內建函數 | 功能說明 | 範例 ---- | ---- | --- className() | 取出類別名稱 | &nbsp; currentPackage() | 取出當前的package名稱 | &nbsp; date([sDate]) | 取出系統日期,sDate是格式字串 | date("yyyy年MM月dd日") enum(s1,s2,...) | 彈出選單 | enum("選項",date(),time(),user()) escapeString(s1) | 將傳入字串做escape處理 | &nbsp; fileName() | 取出檔名 | &nbsp; fileNameWithoutExtension() | 取出檔名(無副檔名) | &nbsp; firstWord(s1) | 取出傳入字串的第一個Word | firstWord("public class Main")取出public groovyScript("groovy程式",參數) | 取出Groovy程式傳回字串;_1表示第一個參數 | &nbsp; jsXXX() | JavaScript相關函數 | jsMethodName()等 lineNumber() | 取出當前行號 | &nbsp; methodName() | 取出當前方法名稱 | &nbsp; methodParameters() | 取出當前方法的參數名稱 | &nbsp; methodReturnType() | 取出當前方法的傳回型態 | &nbsp; suggestVariableName() | 取出建議的變數名稱 | &nbsp; time([sTime]) | 取出系統時間 | &nbsp; user() | 取出使用者帳號 | &nbsp; variableOfType("<type>") | 以型態傳回變數名稱;<br>&lt;type&gt;為空字串表示任意型態 | ### 範例 #### 1. soutv * 功能:顯示變數名稱與值(V1) * Template Text: ```java= System.out.println("$EXPR_COPY$ = " + $EXPR$); ``` * Edit Variables: Name | Expression | Default value | Skip if defined ---- | ---- | ---- | ---- EXPR | variableOfType("") | "expr" | - EXPR_COPY | escapeString(EXPR) | - | ✅ #### 2. sop * 功能:顯示變數名稱與值(V2) * Template Text: ```java= System.out.println("@@$FILE$.$METHOD$ #$LINE$:$EXPR_COPY$=" + $EXPR$); ``` * Edit Variables: Name | Expression | Default value | Skip if defined ---- | ---- | ---- | ---- FILE | fileNameWithoutExtension() | | ✅ METHOD | methodName() | | ✅ LINE | lineNumber() | | ✅ EXPR | variableOfType("") | EXPR_COPY | EXPR | | ✅ ### 3. sopp * 功能:顯示方法的參數名稱與值 * Template Text: ```java= System.out.println("@@$CLASS$.$METHOD$ $END$$PARAMS$); ``` * Edit Variables: Name | Expression | Default value | Skip if defined ---- | ---- | ---- | ---- CLASS | className() | - | ✅ METHOD | methodName() | - | ✅ PARAMS | groovyScript() 見下列Groovy程式 |- | - ```groovy= groovyScript(" def result='參數: '; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) { result += params[i] + '\=\"+' + params[i]; if (i < params.size()-1) { result += '+ \",'; } }; return result", methodParameters()) ``` ### 解說影片 <iframe width="600" height="350" src="http://jdev.tw/files/intellij-idea/idea-files.html" allowfullscreen></iframe> ##