[devtool] IntelliJ: Live Templates
참고 문서
테스트 환경 정보
- IntelliJ IDEA 2021.3
개요
인텔리제이의 라이브 템플릿 소개와 맴대로 추가/수정하는 방법 설명.
라이브 템플릿이란
인텔리제이의 자동 완성은 요래요래 분류되는데:
- Code Completion
- Postfix Completion
- File and Code Templates
- Live Templates
이 중 라이브 템플릿은 특정 키워드를 입력한 후 발동 키를 누르면 미리 정해진 설정에 맞춰 코드가 완성되는 기능이다. 이클립스의 Content Assist와 동일함.
윈도우 OS일 때 라이브 템플릿의 단축키는 ctrl + space이며 그 다음 (필요하면 방향키로 이동해서) enter 혹은 tab으로 선택한다.
여기까지는 누가 알려주지 않아도 아는 내용이쥬?
템플릿 커스터마이징
필요한 템플릿을 마음대로 추가/수정하는 방법을 알아보자.
환경 설정 경로: Settingsctrl + alt + s > Editor > Live Templates
각 번호별 설명:
- 템플릿이 활성화될 언어
- 새 템플릿 추가 버튼
- 축약어(Abbreviation): 축약어나 자동 완성 키워드를 입력하는 곳. 축약어를 지정하고 싶을 땐 자동 완성 키워드 앞에 온점
.
과 대문자 몇 개를 입력한다. 예를 들어EHF. enhanced for-loop
라고 입력해 저장하고 Surround Withctrl + alt + t 기능을 활성화 하면E
,H
,F
중 기존의 라이브 템플릿과 겹치지 않는 하나가 단축키로 지정된다. - 라이브 템플릿 선택 창에서 설명으로 표시되는 텍스트(비워도 됨)
- 변수를 사용할 때 해당 변수가 어떻게 작동해야 하는지 정의하는 메뉴. 위 스샷에선 작성한 변수가 없어서 비활성화되어 있음.
- 이 템플릿이 문맥상 어느 위치에서 활성화 되는지 선택
변수가 뭔디
변수에는 인텔리제이가 알아서 적절한 값으로 채워줄 내용을 정의한다.
예를 들어 축약어 fori
는 Template text가 요렇게 생겼다:
for(int $INDEX$ = 0; $INDEX$ < $LIMIT$; $INDEX$++) {
$END$
}
그리고 Edit variables를 눌러보면:
이렇게 돼 있는데 Name 열에선 변수의 이름을, Expression 열에선 해당 변수가 어떤 값으로 채워져야 하는지를 결정한다.
이 경우 $INDEX$
자리는 적절한 인덱스 변수명(i, j, k, …)으로 채워지고 Expression이 비어있는 $LIMIT$
자리는 아무것도 채워지지 않는다. (대신 탭 포커싱이 됨)
변수의 이름은 사전에 정의된 변수 두 가지를 제외하고 아무렇게나 지어도 된다.
사전 정의 변수
$END$
: 코드 자동 완성 후 캐럿이 위치할 자리를 지정$SELECTION$
: 특정 코드를 선택(드래그)한 뒤 Surround Withctrl + alt + t로 라이브 템플릿을 선택하면$SELECTION$
자리에 선택했던 코드가 자동으로 입력됨
설정 예시
logger
클래스 변수 logger
를 자동으로 완성해 주는 템플릿이다.
Abbreviation은 logger
로, Template Text는 아래처럼 작성한다:
private static final Logger logger = LoggerFactory.getLogger($className$.class);
그 다음 $className$
변수의 값은 className()
으로, 적용 범위는 declaration
으로 선택한다.
className()
: 문맥 상 현재 클래스의 이름을 채워넣는다.declaration
: 이 템플릿이 클래스나 메서드의 선언부에서만 활성화된다.
logger.info
자주 사용하게 될 로그 출력용 템플릿.
Abbreviation은 li
로, Template Text는 아래처럼 작성한다:
logger.info("{}", $aaa$);
$aaa$
변수의 값은 completeSmart()
, 적용 범위는 expression
을 선택한다.
completeSmart()
: 자동 완성 후 문맥에 맞는 변수 선택 툴팁을 띄우게 함.expression
: 이 템플릿이 메서드 바디에서 표현식을 작성할 수 있는 지역일 때만 활성화 됨.
logger.error
try-catch
의 catch
에서 에러 메시지 출력 템플릿.
Abbreviation은 le
로, Template Text는 아래처럼 작성한다:
logger.error($var$.getMessage(), $var$);
$var$
변수의 값은 variableOfType("Exception")
, 적용 범위는 expression
을 선택한다.
variableOfType("Exception")
: 문맥에 맞는Exception
의 서브 타입 변수를 채워 넣는다.
변수의 Expression들이 어떻게 작동하는 지는 공식 가이드를 볼 것.
-끝-