阅读(1407) (9)

IntelliJ IDEA如何自动完成代码

2017-10-23 11:17:12 更新

本节介绍了上下文感知代码完成的各种技术,使您能够加快编码过程。

基本代码完成:完成名称和关键字

基本代码完成可以帮助您在可见性范围内完成类、方法、字段和关键字的名称。当您调用代码完成时,IntelliJ IDEA 分析上下文并提出从当前插入符位置可访问的选项。

代码完成涵盖支持和自定义的文件类型。然而,IntelliJ IDEA 无法识别自定义文件类型的结构,并建议完成选项,而不管特定类型是否适合当前上下文。

如果将基本代码完成应用于字段、参数或变量声明的一部分,IntelliJ IDEA 会根据项目类型建议可能的名称列表。

第二次调用基本代码完成显示了通过模块依赖关系提供的类的名称。 

Note:"基本完成建议" 列表中也会显示 "实时模板"。

当再次调用(连续第三次)时,建议列表将扩展到整个项目,而不考虑依赖关系如何。此操作将完成通过整个项目搜索的类和接口的名称。如果所需的类尚未导入,则将自动导入它。 

Tip:您可以将 IntelliJ IDEA 配置为自动调用“建议”列表,而无需显式调用基本完成。要做到这一点,请在主菜单中选择文件| 设置(或按 Ctrl+Alt+S),在左侧选择:编辑| 一般| 代码( Editor | General | Code Completion)完成,并选择 Autopopup 代码完成选项。
您也可以选择通过输入点、空格等来插入选定的变体。选择使用一些键来接受完成。这些键取决于语言、上下文等。
对于 Java,这样的键包括 Space、Tab、[ 和  ],( 和 ),和更多的键。
请注意,虽然此设置可帮助您节省时间,但将其打开可能会导致项目被意外插入。

使用基本代码完成的步骤如下:

  1. 开始输入名称。
  2. 按 Ctrl+Space 或从主菜单选择:代码| 完成| 基本(Code | Completion | Basic)。
    IntelliJ IDEA使用基本代码完成
  3. 如有必要,请再次按下:Ctrl+Space(此操作将产生与按下 Ctrl+Alt+Space 相同的效果)。这显示了通过模块依赖关系可用的所有类。第二个完成也显示静态字段和方法。
    IntelliJ IDEA使用基本代码完成
    当第三次调用时,基本代码完成将建议列表扩展到整个项目中的所有类,而不考虑依赖关系。

智能代码完成:基于类型信息完成代码

智能代码完成“筛选”建议列表,仅显示适用于当前上下文的类型。

智能代码完成在可以确定适当类型的情况下很有用:

  •  在赋值语句的右侧部分
  •  在变量初始值设定项中
  •  在 return 语句中
  •  在方法调用的参数列表中
  •  在对象声明中的 new 关键字之后
  • 在链式表达式中

使用智能代码完成的步骤如下:

  1. 开始输入;按 Ctrl+Shift+Space 或从主菜单选择:代码| 完成| SmartType (Code | Completion | SmartType)。SmartType 代码完成会自动突出显示最适合当前上下文的建议列表中的选择。例如,在 Java 中的 new 关键字之后考虑智能类型代码完成:
    这仅适用于 Java,并且需要使用 IntelliJ IDEA 编译器(而不是 Gradle 编译器)生成项目。对于链式表达式,建议按项目中使用的频率进行排序。当任何建议的方法调用都接受上下文中尚不可用的参数时,选择IDE后,IDE将定义所需类型的局部变量。
  2. 如有必要,请再按 Ctrl+Shift+Space 一次。这可以让您完成一下操作:集合、列表和数组。IntelliJ IDEA 搜索具有相同组件类型的符号,并建议转换它们。静态方法调用或常量引用。IntelliJ IDEA 扫描静态方法和字段,并建议在当前上下文中适用的那些静态方法和字段。

完成声明

通过智能输入完成,使您能够创建语法正确的代码结构。

要自动完成语句,请开始键入它并按 N/A。添加当前上下文中所需的标点符号,插入符号移动到下一个编辑位置。

  • 完成方法声明:开始键入方法声明并在开始括号后按 N/A:
    IntelliJ IDEA完成方法声明
    这将创建一个方法的整个构造,在方法体内停留的插入符号:
    IntelliJ IDEA完成方法声明
  • 完成代码结构:开始键入代码结构,然后按 N/A:
    IntelliJ IDEA完成代码结构
    IntelliJ IDEA 自动完成构造,插入符号位于下一个编辑位置:
    IntelliJ IDEA完成代码结构
  • 自动封装:当 IntelliJ IDEA 直接在其旁边键入新的方法调用时,自动封装方法调用。例如,键入 "test",然后键入方法调用。当 println 获得建议列表中的焦点时,请使用 N/A 选择它:
    IntelliJ IDEA自动封装
    结果代码将如下所示:
    System.out.println("test");

完成标签名称

IntelliJ IDEA 自动完成以下文件类型中的标签和属性名称和值:

  • HTML / XHTML
  • XML / XSL
  • JSP / JSPX

自动标签名称完成是基于与该文件相关联的 DTD 或 Schema。

如果没有模式关联,IntelliJ IDEA 将使用文件内容(标签和属性名称及其值)来完成输入。

在 XML / XSL 和 JSP / JSPX 文件中,taglib 和命名空间的完成可用。

完成标签名称

  1. 按下 < 并开始输入标签名称。IntelliJ IDEA 显示当前上下文中适当的标签名称列表。使用 ArrowUp 和 ArrowDown 按钮滚动列表。
  2. 按 Enter 可从列表中接受选择。IntelliJ IDEA 根据模式自动插入必需属性。

插入 taglib 声明

  1. 开始输入一个标签并按 Ctrl+Alt+Space。
  2. 从列表中选择一个标签。它所属的 taglib 的 uri 显示在方括号中。
    IntelliJ IDEA插入 taglib 声明
  3. 选择所需的 taglib 并按 Enter。IntelliJ IDEA 添加所选 taglib 的声明:
    IntelliJ IDEA插入 taglib 声明

导入 taglib 声明

  1. 开始输入 taglib 前缀,然后按 Alt+Insert。
  2. 从列表中选择一个 taglib,然后按 Enter。
      IntelliJ IDEA导入 taglib 声明
    IntelliJ IDEA 导入所选的 taglib 并自动添加 import 语句。

Hippie 完成:基于上下文扩展单词

Hippie 完成是一个完成引擎,它可以在可视范围内分析您的文本,并从当前的背景中提取完成提案。它可以帮助您用关键字、类名、方法或变量填写完成一个单词。

要将插入符号的字符串扩展到现有单词,请执行以下操作:

  1. 键入初始字符串并执行以下操作之一:
    • 按 Alt+Slash 或选择代码| 完成| 循环展开 Word(Code | Completion | Cyclic Expand Word)在插入符号之前搜索匹配的单词
    • 按 Shift+Alt+Slash 或选择代码| 完成| 循环展开 Word(向后)(Code | Completion | Cyclic Expand Word (Backward)) 在插入符号和其他打开的文件之后搜索匹配的单词。
      将显示第一个建议的值,并在源代码中突出显示原型:
      Hippie 完成:基于上下文扩展单词
    • 按 Enter 接受该建议,或按住 Alt 键并按住 Slash 直到找到所需的单词。

Postfix 代码完成

Postfix 代码完成帮助您在编写代码时减少向后插入符跳转。它允许您根据您在点之后键入的后缀、表达式的类型及其上下文将已键入的表达式转换为不同的表达式。

例如,如果对表达式应用了.if 后缀,则将其使用 if 语句包装。

未使用 if 语句包装之前:

function m(arg) {
arg.if
}

使用 if 语句包装:

function m(arg) {
if (arg) {

}
}

要启用/禁用后缀完成功能或单独的模板,请在 "设置/首选项" 对话框中,转到编辑器| 一般| Postifx 完成(Editor | General | Postifx completion)。您也可以选择你要使用哪个键来扩展后缀模板: Tab、Space 或 Enter。

Postfix 完成建议作为基本完成建议列表的一部分显示。要查看适用于当前上下文的完整的后缀完整列表,请按 Ctrl+J。

完成代码的提示和技巧

缩小建议列表

您可以通过键入单词的任何部分(甚至是中间某处的字符)缩小建议列表的范围,或者在点分隔符之后调用代码完成。IntelliJ IDEA 将显示包括您在任何位置输入的字符的建议。

这使得通配符的使用是不必要的:

Intelli J IDEA缩小建议列表

在 CamelCase 或 snake_case 名称的情况下,仅键入初始字母。IntelliJ IDEA 自动识别并匹配初始字母。

接受建议

您可以通过以下方式之一接受列表中的建议:

  • 按 Enter 或双击所需的选项将从插入符号左侧完成插入。
  • 按 Tab 可将字符从插入符号向右替换。
  • 使用 N/A 使当前代码构造语法正确(平衡括号,添加缺少的大括号和分号等)

否定表达式

从建议列表中选择后,您可以通过按下 ! 来否定 Java 中的表达式:

IntelliJ IDEA否定表达式

表达将被否定:

IntelliJ IDEA否定表达式

如果在 "代码完成设置" 页中启用了 "插入点"、"空格" 等选项来插入选定的变体代码完成设置页面,或显式调用代码完成,或者显式更改 "建议" 列表中的选定内容, 则否定表达式的工作方式。

查看参考信息

  • 当您在 "建议" 列表中选择一个条目时,可以通过按 Ctrl + Shift + I 来使用 "快速定义" :
    IntelliJ IDEA查看参考信息
  • 在 "建议" 列表中选择一个条目时,可以通过按 Ctrl + Q 来使用 "快速信息" :
    IntelliJ IDEA查看参考信息

在建议列表中排序条目

IntelliJ IDEA 排序图标仅在列表较长且不显示仅包含少数条目的列表时才会出现。

您可以按照字母顺序或相关性对建议列表进行排序。要在这些模式之间切换,请单击 ,它们分别位于列表的右下角。

IntelliJ IDEA 将记住您的选择。您可以在 "代码完成设置" 页中更改默认行为。

查看代码层次结构

当您从建议列表中选择一个条目时,您可以查看代码层次结构:

  • 按 Ctrl+H 查看类型层次结构;
  • 按 Ctrl+Alt+H 查看调用层次结构;
  • 按 Ctrl+Shift+H 查看方法层次结构。