IDEA拥有优秀的代码补全功能。除此之外,还拥有动态模板(Live Templete)和后缀补全(Postfix Completion)功能,让编码更简单。
本篇文档以Java为例,带你领略后缀补全和动态模板的魅力。
后缀补全和动态模板
IDEA在2021年1月的版本上线了自定义后缀补全的功能,在此之前,只能使用预定义好的补全模板。不过现在功能还不甚完善,一些小细节没处理好,但是比起自定义动态模板,后缀补全更符合操作逻辑,也更方便。
动态模板
动态模板即输入一段缩写,然后按下enter后会自动根据前后文生成对应的代码,主要用于方法、类、表达语句内。动态模板中的变量会根据定义,自动获取上下文中的类名、方法名等,从而自动生成代码。
例如,写下sout
即可生成System.out.println();
。甚至可以通过配置动态模板自动生成Swagger注释:https://blog.csdn.net/weixin_40596063/article/details/90897864
优点
- 适合快速生成大段代码。
- 适合用在起始语句中,如if、for、main等。
缺点
- 不适合先写变量,之后再补全的情况。这种情况就十分适合后缀补全。
后缀补全
后缀补全是指在输入变量或代码串后,通过.
等方式,按下tab/space/enter来快速生成代码的方式。例如我们非常常见的"字符串".sout
就会生成代码System.out.println("字符串");
。
自定义后缀补全
通过自定义,我们也可以拥有自己的后缀模板。
以下以“输入toMap
后补全代码为.stream().collect(Collections.toMap());
”为例,设置一个自定义的后缀补全。该例子能够让一个列表类型的变量转换为一个Map。
第一步
打开后缀补全设置(Editor | General | Postfix Completion),点击加号新增一个Java后缀补全:
第二步
在key处设置后缀,支持语言最低版本具体选择。因为本例中Stream接口是Java 8才支持,故我们选择8版本。之后点击加号,设置要以哪种类型的变量作为后缀匹配的匹配变量。从上到下依次是:
- void
- 非void
- 布尔类型
- 数字类型
- 非基本类型(即除了基本类型包装类外的对象)
- 数组(不包括List、Set)
- 在项目中选取类
- 输入类名(需要输入全类名)
因为是列表类型的变量才使用该后缀,故这里我们填写java.util.Collection
。
第三步
最后是输入展开后的表达式。使用$EXPR$
来表示匹配的变量,使用$END$
来表示光标结尾。
- 具体还有什么预定义变量,参见动态模板的文档:https://www.jetbrains.com/help/idea/template-variables.html#pdtv
此处输入
$EXPR$.stream().collect(java.util.Collections.toMap($END$));
注意,这里使用的类名要使用全类名,否则之后还需要手动import类。
完成
保存设置后,便可以使用该后缀补全功能: