还在手写重复代码?IntelliJ IDEA Live Template 一鍵生成,效率直接拉满!

Live Template 快速生成代码模板 🍎
有些代码有结构性的相似,而在开发当中又需要经常使用这些机构控制的代码,那么我们可以考虑使用Template(模板)的方式来加快我们的开发代码的效率和速度!
而Live Template这个功能在intelliJ IDEA中也是非常强大的,IntelliJ 已有的代码Template(模板)能满足你大部分开发需求, 实时代码模板将常见结构插入到你的代码项目中,例如:循环、条件、各种声明打印语句等等..应有尽有!
Live Template的核心作用 🤡
- 有更多的时间去关注
业务逻辑,核心代码可以更优雅! - 减少低级错误出现的可能性, 如果手写拼错和括号错位这些低级错误真是血与泪教训,懂的都懂, 所以一些毫无技术含量的代码都应该通过
live template代码模板来自动生成, 减少重复劳动的工作,错误率也会减少!
体会一下什么叫代码模板 ✨
那可能有些人可能还不明白什么代码模板
这里我简单的举个栗子吧!
例如: 以下这段简单的循环代码!
for (int i = 0; i <10; i++) {
}
你要是选择一个字母、一个字母的输入 需要多久,一段这样的代码其实也没什么,但是如果项目庞大,类似这种代码结构有很多你也一个字母、一个字母去敲,去输入的话那么效率多多少少会有那么点影响!
而在intelliJ IDEA中 你只需要输入 fori再按TAB键,就可以自动生成这个代码!
如图

是不是和原来写代码比起来,你需要敲击键盘的次数少了很多呢! 嘿嘿。
还有很多刚刚入门java的朋友, 刚接触所见到的main函数 也是可以通过输入一个main + TAB来快速生成的!
public static void main(String[] args) {
}
如图

以上这两段简单的代码,在intelliJ IDEA中就可以使用Live Template这个功能来快速生成!
注意:这不是代码提示这是一种代码模板这是两种不同的概念,并且我个人是不建议新手刚入行就使用这种代码模板功能!
在IntelliJ IDEA中提供了很多这样现有的代码模板(Live Template) 你可以在设置里面去找到他们并进行修改和自定义配置自己的代码模板
那么接下来我就来教大家如何:自定义 Live Template, 以后再也不用担心经常加班的问题啦! 哇哈哈哈哈哈!
我们可以依次展开:File---->Settings---->Editor---->Live Template 找到模板配置面板选项!
如图

看到了吧 IntelliJ IDEA默认会给我们预先定义了很多代码模板,并且分好了类别, 也就是说这些代码模板只能按照这些开发语言类型的不同,在具体的开发语言和环境下进行使用!
这里首先我们来看一下By default expand with的意思: 它的含义为 默认情况下代码补全展开方式的按键, 也就是出现的下拉选项中可以指定点击哪个按键的时候,来自动补全代码 这里我建议默认就使用Tab, 但是如果你要设置为Enter也是可以的,因为Tab或Enter结果都是一样的效果!
那么继续这里我们可以在下面类别当中找到Java相关的代码模板,并且找到类似于fori、main、sout等预定义好的代码模板命令
如图


所以你要找代码快捷生成命名就到这里来找就可以了!
改变代码模板的作用范围 💎
前面说了, 代码模板只能按照这些开发语言类型的不同,在具体的开发语言和环境下进行使用!
但是也可以修改它的作用范围!
比如说我们这里选择java下一个main代码模板
如图

在下面可以点击change就能改变当前这个template(代码模板)的作用范围,也就是可以在其他类型的文件中也能够通过这个代码模板命名来进行生成!
但我们提倡不是一个语言类别的代码模板不要混用!
从上面这张图可以看出,输入main快捷命令自动补全代码,而且只有在Java项目中的Declaration中输入才可以使用, 但是在某个文件类型的作用范围当中,我个人觉得把其他的选项都勾选上和只勾选Statement其实区别并不是很大, 所以后面我们自己创建Live Template(代码模板)时候, 其实只把Statement勾选上也就基本可以了!
Live Template 自定义代码模板 🥝
对于我们在项目开发当中需要频繁使用的一些语句,这时我们可以自定义一个Live Template(代码模板)!
这样就非常方便提高开发效率了!
那么具体如何操作如下步骤:
首先肯定是要找到Live Templates面板, 然后找到右侧的+号点击一下,选择Template Group(模板分组)来新建一个自己的代码模板分组

然后取个名字

这样就定义好了一个代码模板分组了

接下来你就可以在这个分组下面进行新建自己的代码模板,这样方便管理!
然后鼠标选中新建好的模板分组,如test,然后再次点击右侧+号,选择Live Template(代码模板)
这样我们就可以详细的来定义一个代码生成模板了

那么这里给新建的代码模版填写如下内容:
| 名称 | 含义 |
|---|---|
Abbreviation |
快捷提示字符串,也就是你在代码当中只需要输出这个字符就能生成代码 |
Description |
添加描述,也就是对这个模板的一些信息描述 |
Template text |
模版内容, 也就是具体的代码 |
Define |
点击这个按钮就可以设置模板作用范围,一般选择Statement就差不多了 |
前面两个选项怎么设置看个人喜好,关键就在于Template text代码模板具体的内容编辑!
它指定了输出代码的样式。代码模板内容中采用了$变量名$的方式预留了变量的位置
那么简单的说这里的变量指的就是模板代码中动态变化的地方!
举个梨子
我们自定义一个mess的快捷命名来生成java打印代码!
如图

效果如下

小提示
在创建模版的右下角有一些Options选项复选框可供我们勾选!
如图

大致意思如下:
Expand With:表示我们在进行代码模板生成时需要按下什么键!Reformat according to Style:是否根据定义的代码风格去设置生成!Shorten FQ names: 缩短全类名
Live Template 模板变量与表达式 🏓
在刚才的定义当中,我们在模板代码内容里面就使用了一个叫$END$的变量,他的意思也就是代码片段生成完毕之后光标所在的位置, 也就是最后光标停留在哪。 $END$是系统自带的变量不可编辑!
那么在代码模板当中动态变化的部份必须要用$名称$裹起来!
然后在代码模板中如果有自定义变量那么右侧的Edit Variables就会变成可点击状态, 对这些变量进行编辑,也就是为这些变量赋予对应的属性!
这些变量可以帮助我们在展开生成代码模板的过程中占着位置,我们可以自己进行输入,当然变量也可以设置默认值。
为了和代码区别,变量会被两个$符号包围。生成后,光标会自动停在第一个变量所在的位置,让我们输入我们想输入的东西,并且输入完毕按下Enter键可以自动的跳到第二个变量的地方,以此类推
举个梨子

效果

另外变量也是可以进行默认值编辑的, 点击右下角的Edit variables
会出现一个Edit Template Variables对话框, 可以对变量进行默认值的编辑和表达式的配置
举个梨子
这里我要快速生成一个for代码模板,并且能够快速循环打印1~10
如图

上图中模板代码如下
for (int $INDEX$ = 1; $INDEX$ <=$LIMIT$ ; $INDEX$++) {
System.out.println($INDEX$); $END$
}
在点击Edit variables之后出现的Edit Template Variables对话框有四个选项让你填写!
具体如下表:
| 名称 | 描述 |
|---|---|
Name |
可以在这里定义变量的名字 |
Expression |
定义变量的值为一个函数表达式,一般情况下这个字段会在定义相对复杂的模版时使用到,intelliJ IEDA内置了一些函数表达式供我们使用! |
Default value |
变量的默认值, 最好用双引号括起来, 也就是前面表达式计算失败时的默认值 |
Skip if defined |
如果变量已经定义过了, 是否忽略 |
| ............................................ |
在Edit Template Variables对话框中的4个选项中,最重要也最多的也就是Expression(表达式)选项了!
在刚才上面的案例当中我们也已经用了一个suggestIndexName()函数表达式
它可以给变量定义一个表达式函数
Expression 表达式函数参数的意义解析表
我们intelliJ IEDA内置了一些,具体如下表:
| 表达式函数名称 | 描述 |
|---|---|
suggestIndexName() |
在循环迭代中返回一个建议的索引变量名称,例如: i,j,k...依次向后排。比如我们在定义使用循环的代码模版时,在定义变量时可以使用该函数来生成的索引自增变量! |
suggestVariableName() |
根据设置的代码风格,基于变量的类型帮你设置一个合适的变量名 |
annotated() |
返回具有指定注解的类,方法或字段名 |
arrayVariable() |
返回当前范围内数组变量,最近的优先展示 |
lineCommentStart() |
返回当前语言指示行注释开始的字符 |
lineNumber() |
返回当前行号 |
blockCommentStart() |
返回当前语言指示块注释开始的字符 |
blockCommentEnd() |
返回当前语言指示块注释结束的字符 |
commentStart() |
返回当前语言指示注释开始的字符,对有行注释的返回行注释开头 |
commentEnd() |
返回当前语言指示注释结束的字符,对有行注释的返回空(行注释通常没有结束字符) |
camelCase(String) |
将字符串转换为驼峰形式 |
snakeCase() |
将字符串转换为下划线分割形式 |
spaceSeparated() |
将字符串转换为空格分开形式 |
spacesToUnderscores() |
将字符串的空格替换为下划线 |
capitalize(String) |
将字符串首字母设为大写 |
capitalizeAndUnderscore(sCamelCaseName) |
将作为参数的所有字母大写,并在各部分之间插入下划线 |
decapitalize(String) |
将字符串首字母设为小写 |
underscoresToCamelCase() |
将下划线形式字符串转换为驼峰形式 |
underscoresToSpaces() |
将下划线形式字符串转换为空格隔开形式 |
lowercaseAndDash() |
将字符串转为小写并使用中划线分割 |
escapeString() |
将字符串中的特殊符号进行转义,便于在java字符串中使用 |
substringBefore(, ) |
截取字符串在之前的部分 |
firstWord() |
返回字符串中的首个单词 |
castToLeftSideType() |
获取左侧变量的类型判断是否需要强转 |
rightSideType() |
获取右侧表达式的变量类型 |
className() |
返回当前所在类(在内部类则返回内部类)类名 常用 |
currentPackage() |
返回当前所在包名 常用 |
qualifiedClassName() |
返回当前所在类(在内部类则返回内部类)的全限定类名(包+类名) |
classNameComplete() |
这个表达式替代了变量位置上的类名补全 |
clipboard() |
返回系统剪贴板的内容 |
complete() |
调用一次代码补全,相当于调用一次Ctrl+Space |
completeSmart() |
调用一次智能代码补全,相当于调用一次Ctrl+Alt+Space |
componentTypeOf() |
返回数组的组件类型 |
concat(, …) |
返回作为参数传递给函数的所有字符串的拼接 |
date([format]) |
指定格式化方式返回当前系统时间字符串(根据SimpleDateFormat格式),如果没有参数,则以默认系统格式返回当前日期 |
time([format]) |
指定格式化方式返回当前系统时间字符串(无日期,根据SimpleDateFormat格式) |
descendantClassesEnum() |
返回指定类的子类 |
lineNumber() |
返回当前行行号 |
enum(, …) |
返回建议的字符串列表 |
expectedType() |
自动识别并返回期望的类型,一般用于赋值,方法参数,返回语句处。 |
fileName() |
返回当前文件名(带扩展名) |
fileNameWithoutExtension() |
返回当前文件名(不带扩展名) |
filePath() |
返回当前文件路径(带扩展名) |
fileRelativePath() |
返回当前文件相对当前项目的路径(带扩展名) |
groovyScript(, [arg, …]) |
执行作为字符串形式传递的groovy脚本,可以是一段groovy代码,也可以是指向Groovy脚本文件的绝对位置,它执行后需要返回一个字符串表示结果 |
guessElementType() |
返回集合中元素的类型 |
iterableComponentType() |
返回可迭代对象的类型 |
iterableVariable() |
返回当前范围内可迭代类型对象,最近的优先展示 |
methodName() |
返回当前所在方法名 |
methodParameters() |
返回当前所在方法的所有参数名 |
methodReturnType() |
返回当前所在方法的返回类型 |
regularExpression(, , ) |
查找字符串中满足的所有部分并替换为 |
typeOfVariable() |
返回变量的类型 |
variableOfType() |
返回当前范围内满足类型条件的变量,最近的优先展示 |
suggestFirstVariableName() |
返回当前范围内满足类型条件的部分变量,最近的优先展示和variableOfType类似但不推荐true,false,this,和super |
subtypes() |
返回指定类型的子类型 |
suggestShortVariableName() |
建议的变量名精简版 |
user() |
返回当前系统的用户名称 |
anonymousSuper() |
为Kotlin对象表达式建议一个超类型 |
JsArrayVariable() |
返回当前javascript数组的名称 |
jsClassName() |
返回当前javascript类的名称 |
jsComponentTypeOf() |
返回当前javascript组件的类型 |
jsDefineParameter |
基于模块的名称,返回参数fromdefine |
jsMethodName() |
返回当前javascript方法的名称 |
jsQualifiedClassName() |
返回当前javascript类的完整名称 |
jsSuggestIndexName() |
返回最常用的索引变量的建议名称:i、j、k等。当前作用域中尚未使用的名称将首先显示。 |
jsSuggestVariableName() |
根据引用变量命名规则的代码样式设置,基于变量类型和初始值设定项表达式返回变量的建议名称。 |
jsSuggestDefaultVariableKind(Boolean) |
布尔参数确定当前上下文中是否允许常量。如果未指定参数,则允许使用常量。 |
lowercaseAndDash(String) |
将camelcase字符串转换为小写,并插入n个破折号作为分隔符 |
snakeCase(String) |
将字符串转换为蛇形大小写。例如,snakecase(foo bar)返回foo_bar。 |
spaceSeparated(String) |
将字符串转换为小写并插入空格作为分隔符 |
substringBefore(String,Delimiter) |
删除指定分隔符后的扩展名并仅返回文件名 |
你也可以到官方去查阅最新的预定义函数
地址: https://www.jetbrains.com/help/idea/template-variables.html#pdtv
以上就是IDEA中的一些表达式函数,用到了再来查就行了,不用去死记硬背这些东西!
IntellIJ IDEA Live Template 中常用代码模板快捷提示符
我大致总结了一下,常用的也就以下这些快捷提示符:
| 快捷提示字符 | 描述含义 |
|---|---|
main |
创建mian方法 |
psvm |
创建main方法 |
sout |
打印输出 |
soutm |
打印当前方法名称 |
soutp |
打印当前方法的参数 |
soutv |
打印当前最近的变量 |
fori |
创建for循环 |
forr |
创建倒序for循环(数组.forr) |
ritar |
创建倒序for循环 |
iter |
增强for循环 |
ifn |
空值判断(null) |
inn |
非空判断(null) |
prsf |
创建私有静态常量 |
psf |
创建公开静态常量 |
psfi |
创建公开int类型常量 |
psfs |
创建公开String类型常量 |
最后
所以说live template在IntelliJ IDEA中是一个强大的预定义代码模板,内容能够根据上下文信息自动推断,你完全可以把很长很庞大的一段代码制作成一段预定义代码模板,来进行引用,开发公司内部的大佬都这样子干的,会让新手感觉很神奇, 你平常要敲很就的代码 ,大佬一秒钟给你实现的根本原因也在于此 哈哈哈哈!

浙公网安备 33010602011771号