添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
淡定的墨镜  ·  Byte Buddy安装 - CSDN文库·  10 月前    · 
豪情万千的皮带  ·  java和PHP ...·  1 年前    · 
玩足球的馒头  ·  Outlook OAuth2 SMTP ...·  1 年前    · 

IntelliJ IDEA 2025.1 Help

实时模板变量

当您展开 实时模板 缩写时,其变量要么显示为可输入值的字段,要么被值替换。 这些值可能是您可以修改的默认值,或者是使用 函数 计算得出的值。

要在模板中声明变量,请使用以下格式: $VAR$

在表达式中,请使用不带开头和结尾的美元字符的变量名 $ ,例如 lowercaseAndDash(ComponentName)

通过表达式定义每个变量,并在表达式求值失败时提供默认值。

此表达式可能包含以下结构:

  • 双引号中的字符串常量

  • 在动态模板中定义的其他变量的名称

  • 预定义函数 及其可能的参数

配置模板变量

  1. 设置 对话框( Ctrl+Alt+S )中,前往 编辑器 | 实时模板

  2. 选择您想要配置变量的模板。

  3. 在模板文本中指定变量,然后点击 编辑变量(E)…

  4. 编辑模板变量 对话框中,您可以对每个变量执行以下操作:

    • 更改变量名。

    • 使用 预定义函数 定义表达式。

    • 指定表达式评估失败时的默认值。 默认值应包含在双引号中。

    • 指定在表达式成功评估后,您是否希望在提示用户输入时跳过该变量。

    实时模板变量

预定义模板变量

IntelliJ IDEA 支持以下无法修改的预定义 实时模板 变量:

  • $END$ 表示代码段完成时文本光标的位置,您不能再按 Tab 跳到下一个变量。

  • $SELECTION$ 用于环绕模板,表示要包装的代码片段。 模板展开后,会按照模板中的指定方式包装所选文本。 例如,如果您在代码中选择 EXAMPLE 并通过指定的缩写或按下 Ctrl+Alt+T 并从列表中选择所需的模板来调用 "$SELECTION$" 模板,IntelliJ IDEA 将如下所示将所选内容用双引号括起来: "EXAMPLE"

用于实时模板变量的函数

以下函数可用于定义 实时模板 变量:

函数

描述

annotated(<annotation>)

返回使用指定限定名称注释的类、方法或字段。 如果您的项目中有多个带有指定注解的程序元素,系统会显示一个供您选择的列表。

例如, annotated("java.lang.Deprecated") 返回所有用 @Deprecated 注释的程序元素。

某些预定义的实时模板在 RESTful Web 服务 Web 服务 组中使用了 annotated() 功能。

anonymousSuper()

建议 Kotlin 对象表达式的超类型。

仅在 Kotlin 上下文中可用。

arrayVariable()

返回当前作用域内最近声明的数组(作为方法变量或类字段)。 如果当前作用域中声明了多个数组,它还会显示一个列表以供您选择。

例如,如果您有以下方法,并在两个数组声明之后使用包含 arrayVariable() 函数的变量展开一个模板,它将默认返回 b 数组,并建议选择 a ,以及作为类字段定义的其他数组:

public String getCode() { int a[] = new int[5]; int b[] = new int[10]; return code;

一些预定义的动态模板在 迭代 组( itar ritar )中使用 arrayVariable() 功能。

blockCommentEnd()

返回指示当前语言上下文中块注释结尾的字符。

例如,在 Java 文件中返回 */

blockCommentStart()

返回表示当前语言环境中块注释开始的字符。

例如,在 Java 文件中返回 /*

camelCase(<String>)

将字符串转换为 camelCase

例如, camelCase("my-text-file") camelCase("my text file") camelCase("my_text_file") 都会返回 myTextFile

capitalize(<String>)

将字符串的首字母大写。

例如, capitalize("name") 返回 名称 。 或者您可以将其组合成 capitalize(camelCase("my awesome class")) 以获得 MyAwesomeClass

capitalizeAndUnderscore(<String>)

将字符串中的所有字母大写,并在各部分之间插入下划线。

例如, capitalizeAndUnderscore("FooBar") capitalizeAndUnderscore("foo bar") capitalizeAndUnderscore("foo-bar") 都会返回 FOO_BAR

castToLeftSideType()

如果有必要,将右侧表达式转换为左侧表达式类型。

某些 迭代 组中的预定义模板使用 castToLeftSideType() 功能,从而为原始类型和泛型类型提供单一模板。

rightSideType() 对比。

className()

返回当前类的名称(您展开模板的地方)。 对构造函数模板可能会有用。

仅在 Java 上下文中可用。

clipboard()

返回系统剪贴板的内容。

commentEnd()

返回指示当前语言环境中注释结尾的字符。 对于带有行注释的语言,返回值为空。

commentStart()

返回指示当前语言环境中注释开始的字符。 对于包含行注释的语言,返回值是行注释的开头,与 lineCommentStart() 相同。

complete()

在变量的位置调用 代码补全

completeSmart()

在变量的位置调用 智能类型完成

componentTypeOf(<array>)

返回数组的组件类型。

例如,您可以将 arrayVariable() 的返回值传递给 componentTypeOf() 函数。 itar 模板使用此逻辑正确地指定数组的迭代元素。

仅在 Java 上下文中可用。

concat(<String>, ...)

返回传递给函数作为参数的所有字符串的连接。

例如, concat(date()," ",user()) 返回当前系统日期和用户名,中间用空格分隔。

currentPackage()

返回当前包的名称(包含您展开模板的类)。

仅在 Java 上下文中可用。

date([format])

返回当前系统日期。

默认情况下,如果没有参数,它会以当前系统格式返回日期。 要使用不同的格式,请根据 SimpleDateFormat 规范提供参数。 例如, date("Y-MM-d, E, H:m") 返回的日期格式为 2020-02-27, Thu, 16:11

dbColumns()

返回表或视图的列的列表。 dbColumns() 用于上下文动态模板(例如, ins )。 您可以通过右键点击一个对象并选择 SQL 脚本 来访问上下文活模板。

dbObjectName()

返回表或视图的名称。 dbObjectName() 用于上下文动态模板(例如, top )。 您可以通过右键点击一个对象并选择 SQL 脚本 来访问上下文活模板。

decapitalize(<String>)

将字符串的首字母替换为相应的小写字母。

例如, decapitalize("Name") 返回 name

descendantClassEnum(<String>)

返回指定类的子类。

如果有多个子类,则显示一个子类列表,您可以从中选择。 例如, descendantClassEnum("java.lang.Number") 返回所有数字类型类,例如, java.lang.Float java.math.BigDecimal 等等。

仅在 Java 上下文中可用。

enum(<String>, ...)

返回模板展开时建议完成的字符串列表。

例如, enum("Foo","Bar","Baz") 显示一个列表,您可以从中选择指定的字符串之一。

escapeString(<String>)

转义特殊字符以便结果可以在 Java 字符串中使用。

例如,它将制表符替换为 \t ,将换行符替换为 \n ,将反斜杠转义为 \\ ,将引号转义为 \" ,等等。

expectedType()

返回模板展开处表达式的预期类型(在赋值右侧、 return 之后、作为方法参数等)。

仅在 Java 上下文中可用。

fileName()

返回当前文件及其扩展名。

fileNameWithoutExtension()

返回当前文件的名称,不包含其扩展名。

filePath()

返回当前文件的绝对路径。

fileRelativePath()

返回相对于当前项目的当前文件路径。 要检查给定文件的相对路径,右键点击它并选择 复制引用 ,或按 Ctrl+Alt+Shift+C

firstWord(<String>)

返回作为参数传递的字符串的第一个单词。

例如, firstWord("one two three") 返回 one

groovyScript(<String>, [arg, ...])

执行作为字符串传递的 Groovy 脚本。

第一个参数是一个字符串,内容可以是脚本的文本或包含脚本的文件路径。 函数将其他可选参数作为值传递给脚本的 _1 _2 _3 、……、 _n 变量。 此外,您可以使用 _editor 变量从脚本内部访问当前编辑器。

以下示例显示了一个 groovyScript() 函数,用于将给定字符串(另一个变量 $MyVar$ 的值)转换为大写字母:

groovyScript("_1.toUpperCase()", MyVar)

以下示例展示了一个 groovyScript() 函数,该函数将选定的文本拆分成词,并将它们显示为编号列表:

groovyScript("def result = ''; _1.split().eachWithIndex { item, index -> result = result + index.next() + '. ' + item + System.lineSeparator() }; return result;", SELECTION)

最后一个例子使用了 SELECTION 预定义变量,这意味着您必须选择文本并按 Ctrl+Alt+T 包围方式 )来应用它。

guessElementType(<Collection>)

返回 java.util.Collection 中存储元素的可能类型。 IntelliJ IDEA 寻找向集合添加或提取元素以定义其类型的代码。

iterableComponentType(<Iterable>)

返回一个可迭代对象的类型,例如数组或集合。

仅在 Java 上下文中可用。

iterableVariable()

返回当前作用域中最近声明的可迭代对象(如数组或集合)。 如果当前作用域中有多个可迭代对象,它还会显示一个供您选择的列表。

预定义的 实时模板 iter 使用了 iterableVariable() 函数。

仅在 Java 上下文中可用。

lineCommentStart()

返回当前语言环境中表示行注释开始的字符。

lineNumber()

返回当前行号。

lowercaseAndDash(<String>)

将字符串转换为小写并插入短横线作为分隔符。 例如, lowercaseAndDash("MyExampleName") lowercaseAndDash("my example name") 都返回 my-example-name

methodName()

返回模板展开的方法名称。

仅在 Java 上下文中可用。

methodParameterTypes()

返回模板展开所在方法的参数类型列表。

仅在 Java 上下文中可用。

methodParameters()

返回模板扩展的方法中参数名称的列表。

仅在 Java 上下文中可用。

methodReturnType()

返回模板展开的当前方法返回值的类型。

仅在 Java 上下文中可用。

qualifiedClassName()

返回模板展开的当前类的完全限定名称。

仅在 Java 上下文中可用。

regularExpression(<String>, <Pattern>, <Replacement>)

查找 模式 String 中的所有出现,并将它们替换为 Replacement 。 您可以将模式指定为正则表达式,以便在字符串中找到与之匹配的所有内容。

例如, regularExpression(NAME, "a", "b") 表达式将把 $NAME$ 模板变量中的所有字母 "a" 替换为字母 "b"。 您可以在模式部分使用 regexp 字符类;例如, regularExpression(NAME, "[a-z]", "b") 将替换变量中的任何字母。 如果您希望诸如 \d \w 的模式被视为 regexp 字符类,您必须对斜杠进行转义,以使您的模式看起来像 "\\d"

rightSideType()

声明左侧变量,其类型由右侧表达式决定。

某些 迭代 组中的预定义模板使用 rightSideType() 功能,从而为原始类型和泛型类型提供单一模板。

castToLeftSideType() 比较。

仅在 Java 上下文中可用。

snakeCase(<String>)

将字符串转换为 snake_case 。 例如, snakeCase("fooBar") snakeCase("foo bar") 都返回 foo_bar

spaceSeparated(<String>)

返回指定字符串,并使用空格作为分隔符。 例如, spaceSeparated("fooBar") 返回 foo Bar spaceSeparated("Foo_BAR") 返回 Foo BAR

spacesToUnderscores(<String>)

将参数字符串中的空格替换为下划线。 例如, spacesToUnderscores("foo bar BAZ") 返回 foo_bar_BAZ

substringBefore(<String>, <Delimeter>)

返回子字符串,直到指定的分隔符。 这有助于删除测试文件名中的扩展名。 例如, substringBefore(fileName(),".") 在名为 component-test.js 的文件中使用时返回 component-test

subtypes(<String>)

返回当前作用域中作为字符串传递的类型的子类型。

预定义的 lazy 实时模板 使用 subtypes(typeOfVariable(VAR)) 函数对变量及其子类型之一执行惰性初始化。

仅在 Java 上下文中可用。

suggestFirstVariableName(<String>)

返回在给定上下文中可能分配给作为参数传递的类型的所有变量。

这与 variableOfType() 类似,但它不会建议 true false this super

suggestIndexName()

返回迭代中索引变量的建议名称,常用的有: i j k 等(第一个在当前范围内未使用的名称)。

某些在 迭代 组别 ( fori , itar , ritar ) 中预定义的模板使用 suggestIndexName() 函数来建议适合的索引变量名。

suggestVariableName()

根据您的代码风格设置中关于变量命名规则的要求,基于变量类型及其初始化表达式建议变量名称。

例如,如果它是一个在迭代中持有元素的变量,IntelliJ IDEA 会根据迭代容器的名称来猜测最合理的名称。 部分预定义模板在 迭代 组 ( itar , itco , iten ) 中使用 suggestVariableName() 函数为迭代元素建议合适的变量名。

time([format])

返回当前系统时间。

默认情况下,在没有参数的情况下,它会返回当前系统格式的时间。 要使用不同的格式,请根据 SimpleDateFormat 规范提供参数。 例如, time("H:m z") 返回的时间格式为 13:10 UTC

typeOfVariable(<String>)

返回传递为参数的变量类型。

仅在 Java 上下文中可用。

typeParameterOf(VAR[,indexOrName])

返回对象参数的类型(例如,集合元素的类型)。 它接受两个参数:

  • VAR :变量名称(可以是另一个实时模板变量)

  • indexOrName :要获取其类型的参数的从 0 开始的索引。 它也可以是类型变量的名称。 如果省略,则返回第一个参数的类型。

例如, typeParameterOf(NAME, "1") 返回 NAME 变量的第二个参数的类型, typeParameterOf(NAME, "K") 返回 K 变量的 NAME 参数的类型。

仅在 Java 上下文中可用。

另请参见 Java itm 实时模板,以了解函数实现的示例。

underscoresToCamelCase(<String>)

将带有下划线的字符串(如 snake_case )转换为 camelCase 。 例如, underscoresToCamelCase(foo_bar_baz) underscoresToCamelCase(FOO_BaR_baZ) 都返回 fooBarBaz

underscoresToSpaces(<String>)

将字符串中的下划线转换为空格。 例如, underscoresToSpaces(foo_bar_baz) 返回 foo bar baz underscoresToSpaces(FOO_BaR_baZ) 返回 FOO BaR baZ

用户()

返回当前用户的名称。

variableOfType(<String>)

返回所有可能分配给作为参数传递的类型的变量。 例如, variableOfType("double") variableOfType("java.util.Vector") variableOfType(methodReturnType())

如果您将一个空字符串 "" 作为参数传递,函数会建议所有变量而不考虑它们的类型。

suggestFirstVariableName() 不同,此函数还返回标准表达式,例如 true false this Outer.this

示例

让我们使用变量和 函数 制作一个简单的实时模板。 它将创建一个具有预定义属性和方法的 Java 类。 模板将包含三个变量:

  • $ClassName$ :新类的名称

  • $Food$ :三个可能的值列表:“meat”、“grass”和“honey”

  • $AnimalName$ :类名以小写字母开头,因此可以在句子中使用

创建一个带有变量的模板

  1. Ctrl+Alt+S 打开设置,然后选择 编辑器 | 实时代码模板

  2. 选择 Java 组,点击 "添加"按钮 ,然后选择 实时模板

  3. 缩写 字段中,指定将用于扩展模板的字符。 例如, 动物

  4. 模板文本 字段中,粘贴以下模板:

    class $ClassName$ extends Animal { String food = "$Food$";