# 语言和引用受限标识符

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

语言注入使您可以处理与文件主语言不同的编程语言的代码片段。

当您将一种语言（如 HTML、CSS、XML、RegExp 等）注入字符串字面量时，即使它不是您的项目的主要语言，您也可以获得针对注入代码的全面编码支持。

除了语言受限标识符，IDE 还支持引用受限标识符，它们会将字符串文字视为对其他实体的引用，例如类或文件。

## 添加语言注入

Procedure: 添加临时语言受限标识符

1. 将文本光标置于要 inject 语言的字符串文字、标记或特性内，然后按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))（或使用 意图操作 图标 ![意图操作图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.codeInsight.intentionBulb.svg)）。

2. 选择   inject 语言或引用  ，然后选择要 inject 的语言。

[Video](https://resources.jetbrains.com.cn/help/img/idea/2026.3/inject-html.mp4)

> **Tip:**
> 如果默认情况下   inject 语言或引用   意图操作 不可用，请转到  `设置 ( `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS))) | 编辑器 | 意图` ，并在   语言注入   部分中选择   inject 语言或引用   复选框。
>
>
>
> ![注入语言或引用复选框](https://resources.jetbrains.com.cn/help/img/idea/2026.3/inject_language_or_reference.png)

Procedure: 添加持久语言受限标识符

使用语言受限标识符注释（注解）添加已 inject 的语言的持久片段。

* 在目标字符串文本前添加一个空行，并输入以下注释：

```SHELL
// language=<language_ID>

```

例如：

```JAVA
public class LanguageInjections {
    // language=HTML
    String s = "<body><h1>Language injections in IntelliJ IDEA</h1></body>";
}

```

另一个示例：

```JAVA
public static String jsonInjection(
        // language=JSON
        String json
){
    return json = "{\"data\":\"value\"}";
}

```

请使用添加注释所在文件的注释语法来编写注释，而不是使用要 inject 的语言的注释语法。 语言 ID 可能与 IntelliJ IDEA 显示的语言名称不同，例如可注入语言列表中显示的名称。

要查找语言 ID，请将文本光标放在注释中的  `language=`  之后，然后按 `Ctrl+Space` (Windows), `⌃ Space` (macOS), `⌃ Space` (IntelliJ IDEA Classic (macOS)), `⌃ Space` (macOS System Shortcuts), `Ctrl+Space` (XWin), `Ctrl+Space` (GNOME), `Ctrl+Space` (KDE), `Alt+/` (Emacs), `Ctrl+Space` (Sublime Text), `⌃ Space` (Sublime Text (macOS)), `Ctrl+Space` (Visual Studio), `⌃ Space` (Visual Studio (macOS)), `Ctrl+Space` (NetBeans), `Ctrl+Space` (Eclipse), `⌃ Space` (Eclipse (macOS))。 补全列表会显示所有可注入语言的 ID，并在圆括号中显示语言名称。

您还可以在设置中了解 language ID。 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `编辑器 | 语言注入` 。 双击某语言的注入规则；语言 ID 已指定在   ID   字段。

* （可选）在注释中包含前缀或后缀。

```SHELL
// language=<language_ID> prefix=<prefix> suffix=<suffix>
```

在以下情况下需要这样做：

* 该字符串是不完整/部分 SQL 语句

* 该字符串未直接用于我们支持的调用之一（例如 `select /where)`

## 为语言注入添加注解

您可以使用来自 [JetBrains Annotations](null) 库的  `@Language`  注解，将代码元素（如成员和参数）标记为语言注入。 这将为您在 IDE 中提供正确的高亮、导航和搜索功能。

例如，您可以将一个注解参数标记为引用某个 Java 方法：

```JAVA
import org.intellij.lang.annotations.Language;

// you can use @Language as a meta-annotation
@Language("jvm-method-name")
@interface MethodName {}

@interface ComponentProperties {
    @MethodName String waitForMethod() default "";
}

class MainComponent {
    @ComponentProperties(waitForMethod = "waitForExampleComponent")
    public ExampleComponent exampleComponent;

    private void waitForExampleComponent() { }
}

```

> **Note:**
> 有关  `@Language`  和其他 JetBrains 注解的完整文档，请参阅 [JetBrains 注解仓库](https://github.com/JetBrains/java-annotations/blob/master/src/jvmMain/java/org/intellij/lang/annotations/Language.java)。

IntelliJ IDEA 会将带注解的字符串识别为方法名，并允许您对该元素使用 [Rename](rename-refactorings.html)重构以及其他功能。

![“重命名”弹出窗口会同时重命名目标方法和带注解的字符串](https://resources.jetbrains.com.cn/help/img/idea/2026.3/annotate-as-method-name.png)

## 编辑已 inject 的语言片段

IntelliJ IDEA 允许您在专用编辑器中编辑注入的语言片段。

Procedure: 打开片段编辑器

1. 将文本光标置于已 inject 的代码片段内，然后按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))（或使用 意图操作 图标 ![意图操作图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.codeInsight.intentionBulb.svg)）。

2. 选择   编辑 <language ID> 片段  。

IntelliJ IDEA 将打开一个专用编辑器区域，用于编辑带有已 inject 语言的代码。 此编辑器提供完整的编码辅助，包括代码补全、检查、意图操作s 和代码样式操作。

![在专用编辑器中编辑注入的代码片段](https://resources.jetbrains.com.cn/help/img/idea/2026.3/edit-injection.png)

> **Note:**
> 编辑代码时，只能在片段编辑器中看到前缀和后缀。 它们不会显示在主编辑器中。

## inject 引用

引用注入将字符串字面量解释为指向其他实体（例如类、方法、字段或文件）的链接。

例如，类似  `com.example.MyClass`  的字符串可以解析为对 Java 类的引用，而  `resources/config.json`  可以视为对文件的引用。

Procedure: 添加临时引用受限标识符

1. 将文本光标置于要 inject 引用的字符串文字内，然后按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))（或使用 意图操作 图标 ![意图操作图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.codeInsight.intentionBulb.svg)）。

2. 选择   inject 语言或引用   并选择一个选项，例如：

* 文件引用 ：添加对指定文件的引用。

* JVM 类名 ：添加对指定类的引用。

* JVM 字段名称 ：添加对字段的引用。

* JVM 方法名 ：添加对方法的引用。

根据安装的插件，可能还会有其他引用选项可用。 例如，您可能可以注入 HTTP 方法、标头或 URL 引用。

![注入文件引用](https://resources.jetbrains.com.cn/help/img/idea/2026.3/ij_reference_injections.png)

Procedure: 添加持久引用受限标识符

使用注释添加持久引用受限标识符。

* 在目标字符串文字前添加一个空行，并输入包含必要值的  `// language=`  注释。

* `// language=file-reference` 会添加对文件的引用。

* `// language=jvm-class-name` 会添加对类的引用。

* `// language=jvm-filed-name` 会添加对字段的引用。

* `// language=jvm-method-name` 会添加对方法的引用。

示例：

```JAVA
public class FileReference {
    public static void main(String[] args) {
        // language=file-reference
        printFilePath("src/main/resources/config.properties");
    }
}

```

或

```JAVA
public class ClassReference {
    public static void main(String[] args) {
        //language=jvm-class-name
        String className = "java.util.ArrayList";
    }
}

```

> **Tip:**
> 您也可以使用 [注解](#language-injections) 进行持久引用注入，例如  `@Language ("jvm-class-name")` 。

## 取消注入

Procedure: 取消持久语言受限标识符

要取消语言受限标识符，请删除用于引入它的注释（注解）。

Procedure: 取消临时语言受限标识符

1. 将文本光标置于代码段处，然后按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))（或使用 意图操作 图标 ![意图操作按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.codeInsight.intentionBulb.svg)）。

2. 选择   取消注入语言或引用  。

Procedure: 禁用意图操作灯泡图标

请执行以下操作以隐藏编辑器中的意图操作图标 ![意图操作图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.codeInsight.intentionBulb.svg)：

1. 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `编辑器 | 常规 | 外观` 。

2. 清除   显示意图灯泡   复选框。

3. 应用更改并关闭对话框。

## 配置自动注入规则

在 IntelliJ IDEA 中，有一组预定义规则，根据这些规则，IDE 会在您的代码中的某些位置自动注入语言。

您可以在   编辑器 | 语言注入   设置页面 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 配置语言受限标识符规则。

![语言注入设置](https://resources.jetbrains.com.cn/help/img/idea/2026.3/injections-settings.png)

所有预定义的受限标识符规则都配置为   内置   作用域。 换句话说，它们是全局的（因此在所有 IntelliJ IDEA 项目中都可用）。 自定义规则可以配置为适用于 IDE，或仅适用于一个项目。 要更改自定义受限标识符的作用域，请使用 ![“移动到 Project/IDE 作用域”按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.expui.general.import.svg)。

要通过 VCS 共享自定义规则，请使用工具栏上的相应选项将其移动到   项目   作用域。 通过这样做，您将在  `.idea`  目录中创建一个名为  `IntelliLang.xml`  的新文件，其中包含您可以置于版本控制下的自定义规则。

如果不使用 VCS，可以通过将规则导出到 XML 文件（点击工具栏上的 ![导出](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.expui.general.export.svg)），再将其导入另一个项目来共享规则。

要配置自定义注入规则，请点击 !["添加"按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.expui.general.add.svg)以添加新规则，或复制预定义规则并更改其设置。

## See also

### 参考

[语言注入](language-injections-settings.html)

