---
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() | 取出類別名稱 |
currentPackage() | 取出當前的package名稱 |
date([sDate]) | 取出系統日期,sDate是格式字串 | date("yyyy年MM月dd日")
enum(s1,s2,...) | 彈出選單 | enum("選項",date(),time(),user())
escapeString(s1) | 將傳入字串做escape處理 |
fileName() | 取出檔名 |
fileNameWithoutExtension() | 取出檔名(無副檔名) |
firstWord(s1) | 取出傳入字串的第一個Word | firstWord("public class Main")取出public
groovyScript("groovy程式",參數) | 取出Groovy程式傳回字串;_1表示第一個參數 |
jsXXX() | JavaScript相關函數 | jsMethodName()等
lineNumber() | 取出當前行號 |
methodName() | 取出當前方法名稱 |
methodParameters() | 取出當前方法的參數名稱 |
methodReturnType() | 取出當前方法的傳回型態 |
suggestVariableName() | 取出建議的變數名稱 |
time([sTime]) | 取出系統時間 |
user() | 取出使用者帳號 |
variableOfType("<type>") | 以型態傳回變數名稱;<br><type>為空字串表示任意型態 |
### 範例
#### 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>
##