一、IDEA Setteing
界面
Setting → Editor → Live Lemplates
二、编辑 Llive Lemplate
点击+
按钮,点击Template Group
添加一个分组;选中分组,再通过加号添加Live Template
设置模板
- Abbreviation(缩进名):即之后代码输入pssd按快捷键即可生成
private static String var
; - Edit variables(编辑编写):编辑变量,包括顺序,变量功能等,详见下方备注
- Description(注释):注释模板功能
- Template text(模板主体):
\$x\$
x为变量,\$END\$
为自带变量,即最后光标停留位置 - Applicable(应用范围):指明在什么文件什么情况下使用。一般默认勾选java就可以
- options(快捷键):即输入
pssd
后按下Enter
还是Tab
生成模板。作者一般使用Tab键,一方面是防止与自带模板冲突,另一方面与shell
快捷键一至 - Reformate According to Style:自动进行代码格式化。不勾选代码不会自动缩进换行
三、自带变量参数
IntelliJ IDEA 实时代码模板是有变量参数设置的(全部预定义函数,具体可参见官方文档)
1. 预定义变量
IntelliJ IDEA Live Templates 自带两个预定义变量参数:
变量名 | 描述 |
---|---|
$END$ | 光标的最后位置(即:编辑完之后光标所处的最后位置) |
$SELECTION$ | 填充被选中内容(即:设置环绕实时代码) |
2. 预定义函数
变量名 | 描述 |
---|---|
className() | 返回当前类名 |
classNameComplete() | 选择类名进行返回 |
complete() | 替代变量的代码 |
completeSmart() | 替代变量智能类型代码 |
currentPackage() | 当前包全路径 |
date(sDate) | 当前时间,可以填写格式 |
fileName() | 文件名与扩展 |
fileNameWithoutExtension() | 文件名不含扩展 |
lineNumber() | 返回当前行号 |
methodName() | 返回所在方法名 |
methodParameters() | 返回当前方法参数列表,数组形式,形如[a, b] |
time(sSystemTime) | 返回当前时间,可以设置格式 |
user() | 返回当前系统用户 |
camelCase(String) | 字符串转换 |
capitalize(String) | 将参数的第一个字母大写 |
四、应用场景
多加$END$
是为了输入变量后,按enter
键直接跳到下一行
1. 带注释的静态变量
/**
* $VAR2$
*/
private static String $VAR1$;
$END$
2. 判断条件
if (StringUtil.isNotBlank($VAR1$)) {
$END$
}
3. 循环语句
例如:counter.fori + tab,IDEA会自动补全for循环
同理,使用list.iter + tab 也有相应操作
五、Live Lemplates 模板
1.普通模板
.groupBy
// Description(注释)
.collect(Collectors.groupingBy(e -> \$END\$));
// Template text(模板主体)
.collect(Collectors.groupingBy(e -> $END$));
.join
// Description(注释)
.collect(Collectors.joining("\$END\$"));
// Template text(模板主体)
.collect(Collectors.joining("$END$"));
.toList
// Description(注释)
.collect(Collectors.toList());
// Template text(模板主体)
.collect(Collectors.toList());
.toSet
// Description(注释)
.collect(Collectors.toSet());
// Template text(模板主体)
.collect(Collectors.toSet());
ife
// Description(注释)
if(\$END\$){}else{}
// Template text(模板主体)
if($END$){
}else{
}
eif
// Description(注释)
else if(\$END\$){}
// Template text(模板主体)
else if($END$){
}
loggerDefineStatic
// Description(注释)
define logger by Class
// Template text(模板主体)
private static final Logger logger = LoggerFactory.getLogger(\$CLASS_NAME\$.class);
设置 Edit variables
Name | Expression | Default value | Skip if defined |
---|---|---|---|
CLASS_NAME | className() |
loggerDefineThis
// Description(注释)
define logger by this.getClass()
// Template text(模板主体)
private final Logger logger = LoggerFactory.getLogger(this.getClass());
logstart
// Description(注释)
define logger
// Template text(模板主体)
log.info("$METHOD_NAME$ → $PARAMS_FORMAT$", $PARAMS$);
设置 Edit variables
Name | Expression | Default value | Skip if defined |
---|---|---|---|
METHOD_NAME | methodName() | ||
PARAMS_FORMAT | groovyScript(“_1.collect{it+‘={}’}.join(‘,’)”, methodParameters()) | ||
PARAMS | groovyScript(“_1.collect{it}.join(‘,’)”, methodParameters()) |
mian
// Description(注释)
main method
// Template text(模板主体)
public static void main(String[] args) {
System.out.println($START$);
}
psa
// Description(注释)
带注释的String类属性
// Template text(模板主体)
/**
* $VAR1$
*/
private String $VAR2$;
$END$
psas
// Description(注释)
带注释和Swagger注解的String类属性
// Template text(模板主体)
/**
* $VAR1$
*/
@ApiModelProperty(value = "$VAR1$")
private String $VAR2$;
$END$
可按此方式设置Integer
、Long
、Double
、BigDecimal
等其它属性模板
sop
// Description(注释)
System.out::println
// Template text(模板主体)
System.out::println
soutm
// Description(注释)
System.out.println("class_name.method_name");
// Template text(模板主体)
System.out.println("$CLASS_NAME$.$METHOD_NAME$");
设置 Edit variables
Name | Expression | Default value | Skip if defined |
---|---|---|---|
CLASS_NAME | className() | ||
METHOD_NAME | methodName() |
syse
// Description(注释)
Prints a string to System.err
// Template text(模板主体)
System.err.println($START$);
test
// Description(注释)
add unit test method
// Template text(模板主体)
@Test
public void test() {
$END$
}
todo
可修改自带模板
Settings → Live Templates → AndroidComments → TODO
// Description(注释)
adds // TODO-MICHAEL
// Template text(模板主体)
// TODO-MICHAEL: $date$ $todo$
设置 Edit variables
Name | Expression | Default value | Skip if defined |
---|---|---|---|
date | date() | ||
todo |
sw/swi
// Description(注释)
create switch/case block
// Template text(模板主体)
switch($END$){
case OBJECT:
break;
default:
break;
}
isempty
// Description(注释)
CollectionUtils isEmpty()
// Template text(模板主体)
if (CollectionUtils.isEmpty($EXPR$)) {
$END$
}
isnotempty
// Description(注释)
CollectionUtils isNotEmpty()
// Template text(模板主体)
if (CollectionUtils.isNotEmpty($EXPR$)) {
$END$
}
nlist
// Description(注释)
declare the (ArrayList) variable
// Template text(模板主体)
List<$VAR1$> $VAR2$List = new ArrayList<>();$END$
nmap
// Description(注释)
declare the (HashMap) variable
// Template text(模板主体)
Map<$VAR1$, $VAR2$> $VAR3$Map = new HashMap<>();$END$
nmapl
// Description(注释)
declare the (LinkedHashMap) variable
// Template text(模板主体)
Map<$VAR1$, $VAR2$> $VAR3$Map = new LinkedHashMap<>();$END$
notnull
// Description(注释)
Check list is not null
// Template text(模板主体)
if(null != $EXPR$ && $EXPR$.size() > 0){
$END$
}
nset
// Description(注释)
declare the (HashSet) variable
// Template text(模板主体)
Set<$VAR1$> $VAR2$Set = new HashSet<>();$END$
nsetl
// Description(注释)
declare the (LinkedHashSet) variable
// Template text(模板主体)
Set<$VAR1$> $VAR2$Set = new LinkedHashSet<>();$END$
2. 环绕实时代码模板
快捷键 | 描述 |
---|---|
Ctrl+J | 插入普通的live template |
CTRL+ALT+J | 插入普通的live template(即:弹出所有模板,输入对应快捷内容,Tab进行选中;环绕选中,会弹出含有$SELECTION$的模板) |
CTRL+ALT+T | 弹出所有环绕模板,包括if、while、try等模板 |
slogd
// Description(注释)
log with selection → log.debug("info:{}", "")
// Template text(模板主体)
log.debug("info:{}", $SELECTION$);
sloge
// Description(注释)
log with selection → log.error("info:{}", "")
// Template text(模板主体)
log.error("info:{}", $SELECTION$);
slogi
// Description(注释)
log with selection → log.info("info:{}", "")
// Template text(模板主体)
log.info("info:{}", $SELECTION$);