PyCharm 2025.3 Help

动态模板变量

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

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

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

使用表达式定义每个变量,并在表达式无法求值时提供默认值。

该表达式可以包含以下结构:

  • 双引号中的字符串常量

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

  • 预定义函数 ,可带参数

配置模板变量

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

  2. 选择您要在其中配置变量的模板。

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

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

    • 更改变量名称。

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

    • 在表达式无法求值时指定默认值。 默认值应使用双引号括起来。

    • 在表达式成功求值时,指定在提示用户输入时是否跳过该变量。

    动态模板变量

预定义模板变量

PyCharm 支持以下不可修改的预定义动态模板变量:

  • 当代码片段完成时, $END$ 指示插入符号的位置,此时您不能再按 Tab 跳转到下一个变量。

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

动态模板变量中使用的函数

可以使用以下函数来定义动态模板变量:

函数

描述

blockCommentEnd()

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

blockCommentStart()

返回在当前语言上下文中表示块注释开始的字符。

camelCase(<String>)

将字符串转换为 camelCase

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

capitalize(<String>)

将字符串的首字母大写。

例如, capitalize("name") 返回 Name。 或者,您可以将其组合为 capitalize(camelCase("my awesome class")) 以得到 MyAwesomeClass

capitalizeAndUnderscore(<String>)

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

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

clipboard()

返回系统剪贴板的内容。

collectionElementName()

移除 _list 和复数结尾(s)。

commentEnd()

返回在当前语言上下文中表示注释结束的字符。 对于具有行注释的语言,返回值为空。

commentStart()

返回在当前语言上下文中表示注释开始的字符。 对于具有行注释的语言,返回值是行注释的起始符,与 lineCommentStart() 相同。

complete()

在变量位置调用 代码补全

completeSmart()

在变量位置调用 智能类型补全

concat(<String>, ...)

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

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

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

defaultReturnValues

如果在 return 语句中使用该表达式,则返回默认值。 如果表达式的类型为错误类型,则使用 errorVariableName 参数。

djangoBlock

显示可用 Django 块的补全弹窗。

djangoFilter

显示可用 Django 过滤器的补全弹窗。

djangoTemplateTags

显示可用 Django 模板标签的补全弹窗。

djangoVariable

显示可用 Django 变量的补全弹窗。

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环绕 )才能应用它。

JsArrayVariable()

返回当前 JavaScript 数组的名称。

jsClassName()

返回当前 JavaScript 类的名称。

jsComponentTypeOf()

返回当前 JavaScript 组件的类型。

jsDefineParameter

根据模块名称,从 define(["module"], function (<parameter_in_question>>) {}) 返回参数。

jsMethodName()

返回当前 JavaScript 方法的名称。

jsQualifiedClassName()

返回当前 JavaScript 类的完整名称。

jsSuggestDefaultVariableKind(Boolean)

布尔参数用于确定在当前上下文中是否允许常量。 如果未指定参数,则允许常量。 当模板展开时,对于 TypeScript 和 ES6,会显示包含 varletconst 选项的列表;对于较早的 JavaScript 版本,仅显示一个 var 选项。

jsSuggestImportedEntityName()

根据文件名,为 `import * as $ITEM$ from "$MODULE$"``import $ITEM$ from "$MODULE$"` 类型的 import 语句建议名称。

jsSuggestIndexName()

从最常用的名称中返回索引变量的建议名称: ijk 等。 当前作用域中尚未使用的名称将优先显示。

jsSuggestVariableName()

根据您的代码样式设置中关于变量命名规则的配置,基于变量类型和初始化表达式返回变量的建议名称。 例如,如果这是一个在迭代中保存元素的变量,PyCharm 会结合被迭代容器的名称,推断出最合适的名称。

lineCommentStart()

返回在当前语言上下文中表示行注释起始的字符。

lineNumber()

返回当前行号。

lowercaseAndDash(<String>)

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

pyClassName()

返回当前 Python 类的名称(模板展开所在的类)。

pyFunctionName()

返回当前 Python 函数的名称。

pyIterableVariable()

为可迭代变量启用特定作用域的补全。

在动态模板中使用 pyIterableVariable()

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

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

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

showParameterInfo()

在向函数或方法添加参数时,返回参数详细信息。

使用示例:

显示参数信息

snakeCase(<String>)

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

spaceSeparated(<String>)

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

spacesToUnderscores(<String>)

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

substringBefore(<String>, <Delimeter>)

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

time([format])

返回当前系统时间。

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

typeOfVariable(<String>)

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

仅在 Java 上下文中可用。

underscoresToCamelCase(<String>)

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

underscoresToSpaces(<String>)

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

user()

返回当前用户的名称。

示例

让我们使用变量和 函数 制作一个简单的动态模板。 它将创建一个带有预定义类变量和方法的 Python 类。 模板将包含三个变量:

  • $ClassName$ :新类的名称

  • $Food$ :三个可能值的列表:"肉"、"草" 和 "蜂蜜"

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

创建包含变量的模板

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

  2. 选择 Python 组,点击 添加按钮 ,并选择 实时模板

  3. 缩写 字段,指定将用于展开模板的字符。 例如, animal

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

    class $ClassName$(Animal): food = "$Food$" def animal_food(self): print(f"The $AnimalName$ eats {self.food}.")
    创建动态模板
  5. 如果有 无适用上下文 警告,点击 定义 并选择您希望此动态模板可用的上下文。 例如, Python

    为动态模板选择上下文
  6. 点击 编辑变量(E)… ,并在 编辑模板变量 对话框中配置变量:

    • $ClassName$ 保持不变,这意味着我们希望用户在应用此模板时输入一个值。

    • $Food$ :在 表达式 字段,输入 enum("meat","grass","honey")。 此函数允许用户在应用此模板时选择预定义值之一。

    • $AnimalName$ :在 表达式 字段,输入 decapitalize(ClassName)。 此函数获取 ClassName 变量的值,并将其首字母转换为小写。 选择 如果定义则跳过 ,因为我们不需要提示用户输入。

    动态模板上下文

使用动态模板

  1. 开始键入动态模板的名称(在我们的示例中为 animal)。

  2. 键入该变量的值(在我们的示例中为类名),然后按 Tab 跳转到下一个变量。

  3. 使用键盘箭头,为 food 字符串选择其中一个值。

最后修改日期: 2025年 12月 2日