在Jetbrains IDE中创建模板

参赛作品


今天,我想对Jetbrains的WBS中的模板做一个简短的概述。 下面的示例将在Intellij IDEA中用Java实现,但是创建机制对于公司的其他语言和产品是相同的。 我认为该IDE中的所有程序员都使用内置模板。 例如,当您编写fori时,按TAB或ENTER键,您将获得一个for循环,您需要在其中指定变量名称和条件,并为您生成其余代码。

for (int i = 0; i < ; i++) { } 

或sout-> System.out.println(),所有Java程序员都熟悉。 因此,Intellij支持创建自己的代码模板。 出乎意料的是,当我遇到此功能时,尽管发现它可以大大加快速度并有助于开发,但我发现几乎没有俄语信息,也没有很多英语信息(因为有很好的文档资料 )。 现在,当他们到处走走时,我决定写一篇简短的文章。 也许它将对经验不足的程序员有所帮助,他们自己将能够弄清一切或长期使用它,但是我认为它非常适合其他所有人。 因此,让我们开始吧。

建立范本


首先,让我们举一个简单的示例,例如logger常量。 转到设置->编辑器->动态模板 。 在这里,您可以查看现成的模板组并创建自己的模板-单击面板右侧的加号。 您也可以创建一个单独的模板,然后将其添加到用户组。 单击后,将在下面显示一个窗口,您需要在其中输入模板的缩写,描述和实际文本。 还会有一个警告题词“ No适用的上下文 ”和旁边的“ 定义”按钮,单击该按钮我们将看到可能的上下文列表-HTML,XML,Java,Javascript,CSS等。 有些包含子项,例如,在Java中,它是在方法,注释,类级别,其他位置或任何地方一次使用模板的功能。 让我们以整个Java包为例。

我们将日志写为缩写,下面是这样的一行作为测试:

 private static final Logger LOGGER = Logger.getLogger($CLASS_NAME$.class.getName()); 

接下来,点击右侧的按钮- 编辑变量 。 在打开的窗口中,我们看到一个包含一条记录的表-CLASS_NAME,它对应于我们在文件文本中指定的变量作为类名。 它具有字段“ 表达式” ,“ 默认值” ,“ 跳过”(如果已定义) 。 第一个字段是一个选择,其中向我们提供了可以替换的所有值。 第二条只是一行,我们可以在其中引用任何内容。 好吧,如果在第一个属性之一中指定了变量,则第三个字段可让我们跳过对变量的编辑。 在我们的例子中,我们需要从Expression字段中选择className()的值。 如果需要,您可以选择编辑密码。 单击“ 确定” ,在“ 应用”之后,您可以进行检查。 我们用任何名称创建一个类,在日志中输入内容,按TAB键并按voila-我们有一个记录器,该记录器使用当前类的名称代替了CLASS_NAME。

一个例子:

 public class CodeTemplates { private static final Logger LOGGER = Logger.getLogger(CodeTemplates.class.getName()); } 

功能特点:


1.创建模板时,有一个键变量$ END $指示创建模板时光标的位置(默认情况下,在模板代码的末尾)。

 System.out.println($END$); 

2.第二个关键变量是$ SELECTION $ 。 如果模板中存在它,则它将出现在“ 环绕声”菜单中( Ctrl + Alt + T )。 如果要包装代码,这是必需的。

 System.out.println("$SELECTION$"); 

假设您有一个单词或句子,例如TEST-将光标放在单词的末尾,按Ctrl + Alt + T,然后在可以选择自己的模板中选择,然后得到:

 System.out.println("TEST"); 

PS:对于代码或文本块,只需先选择它即可。

3.扩展中的某些扩展名可以采用各种类型的值作为参数,包括其他扩展名。 为了更加清楚,我将举一个例子。 也许许多人都熟悉JPA Table批注,除其他外,您可以在其中传递与该类(实体)相对应的表的名称。 通常,表名和类名是相同的,唯一的区别是className变为CLASS_NAME。 用于创建此注释的模板如下所示:

 @Table(name = "$TABLE NAME$") 

在扩展中,选择capitalizeAndUnderscore(String) ,仅使用我们自己指定的className代替String:

capitalizeAndUnderscore(className)

一个例子:

 @Table(name = "CODE_TEMPLATES") public class CodeTemplates { ... } 

PS:
您也可以像输入中一样在“扩展名”字段中选择自己的值,但我看不到重点,因为您可以在“默认值”字段中执行此操作。

4.也可以以jar文件的形式导入( 文件->导入设置 )和导出( 文件->导出设置 )模板和其他设置。 由于模板是作为xml文件导出的,因此您可以选择转到.IntelliJIdea $ VERSION $ / config / templates目录,然后在其中添加xml。 在这种情况下,您需要在文件中指定一组模板,否则您将不会在列表中看到它们。 如果未指定组,则可以将各个模板作为选项-user.xml添加到现有文件之一。
带有记录器和Table的示例user.xml:
 <templateSet group="user"> <template name="log" value="private static final Logger LOGGER = Logger.getLogger($CLASS_NAME$.class.getName());" description="Logger Template" toReformat="false" toShortenFQNames="true"> <variable name="CLASS_NAME" expression="className()" defaultValue="" alwaysStopAt="true" /> <context> <option name="JAVA_DECLARATION" value="true" /> </context> </template> <template name="tb" value="@Table(name = "$TABLE_NAME$")" description="" toReformat="false" toShortenFQNames="true"> <variable name="TABLE_NAME" expression="capitalizeAndUnderscore(className)" defaultValue="" alwaysStopAt="true" /> <context> <option name="JAVA_CODE" value="true" /> </context> </template> </templateSet> 


结论


我希望今天的文章对您有所帮助,并有助于加速那些尚未使用其模板的用户的发展。

PS:如果愿意,您可以为IDE编写自己的插件,包括模板扩展。

欢迎进行更正或添加。

链接到官方文档: 这里
谢谢, Justboris

Source: https://habr.com/ru/post/zh-CN414813/


All Articles