IntelliJ IDEA如何自动完成代码
本节介绍了上下文感知代码完成的各种技术,使您能够加快编码过程。
基本代码完成:完成名称和关键字
基本代码完成可以帮助您在可见性范围内完成类、方法、字段和关键字的名称。当您调用代码完成时,IntelliJ IDEA 分析上下文并提出从当前插入符位置可访问的选项。
代码完成涵盖支持和自定义的文件类型。然而,IntelliJ IDEA 无法识别自定义文件类型的结构,并建议完成选项,而不管特定类型是否适合当前上下文。
如果将基本代码完成应用于字段、参数或变量声明的一部分,IntelliJ IDEA 会根据项目类型建议可能的名称列表。
第二次调用基本代码完成显示了通过模块依赖关系提供的类的名称。
Note:"基本完成建议" 列表中也会显示 "实时模板"。
当再次调用(连续第三次)时,建议列表将扩展到整个项目,而不考虑依赖关系如何。此操作将完成通过整个项目搜索的类和接口的名称。如果所需的类尚未导入,则将自动导入它。
Tip:您可以将 IntelliJ IDEA 配置为自动调用“建议”列表,而无需显式调用基本完成。要做到这一点,请在主菜单中选择文件| 设置(或按 Ctrl+Alt+S),在左侧选择:编辑| 一般| 代码( Editor | General | Code Completion)完成,并选择 Autopopup 代码完成选项。
您也可以选择通过输入点、空格等来插入选定的变体。选择使用一些键来接受完成。这些键取决于语言、上下文等。
对于 Java,这样的键包括 Space、Tab、[ 和 ],( 和 ),和更多的键。
请注意,虽然此设置可帮助您节省时间,但将其打开可能会导致项目被意外插入。
使用基本代码完成的步骤如下:
- 开始输入名称。
- 按 Ctrl+Space 或从主菜单选择:代码| 完成| 基本(Code | Completion | Basic)。
- 如有必要,请再次按下:Ctrl+Space(此操作将产生与按下 Ctrl+Alt+Space 相同的效果)。这显示了通过模块依赖关系可用的所有类。第二个完成也显示静态字段和方法。
智能代码完成:基于类型信息完成代码
智能代码完成“筛选”建议列表,仅显示适用于当前上下文的类型。
智能代码完成在可以确定适当类型的情况下很有用:
- 在赋值语句的右侧部分
- 在变量初始值设定项中
- 在 return 语句中
- 在方法调用的参数列表中
- 在对象声明中的 new 关键字之后
- 在链式表达式中
使用智能代码完成的步骤如下:
- 开始输入;按 Ctrl+Shift+Space 或从主菜单选择:代码| 完成| SmartType (Code | Completion | SmartType)。SmartType 代码完成会自动突出显示最适合当前上下文的建议列表中的选择。例如,在 Java 中的 new 关键字之后考虑智能类型代码完成:
- 如有必要,请再按 Ctrl+Shift+Space 一次。这可以让您完成一下操作:集合、列表和数组。IntelliJ IDEA 搜索具有相同组件类型的符号,并建议转换它们。静态方法调用或常量引用。IntelliJ IDEA 扫描静态方法和字段,并建议在当前上下文中适用的那些静态方法和字段。
完成声明
通过智能输入完成,使您能够创建语法正确的代码结构。
要自动完成语句,请开始键入它并按 N/A。添加当前上下文中所需的标点符号,插入符号移动到下一个编辑位置。
- 完成方法声明:开始键入方法声明并在开始括号后按 N/A:
- 完成代码结构:开始键入代码结构,然后按 N/A:
- 自动封装:当 IntelliJ IDEA 直接在其旁边键入新的方法调用时,自动封装方法调用。例如,键入 "test",然后键入方法调用。当 println 获得建议列表中的焦点时,请使用 N/A 选择它:
System.out.println("test");
完成标签名称
IntelliJ IDEA 自动完成以下文件类型中的标签和属性名称和值:
- HTML / XHTML
- XML / XSL
- JSP / JSPX
自动标签名称完成是基于与该文件相关联的 DTD 或 Schema。
如果没有模式关联,IntelliJ IDEA 将使用文件内容(标签和属性名称及其值)来完成输入。
在 XML / XSL 和 JSP / JSPX 文件中,taglib 和命名空间的完成可用。
完成标签名称
- 按下 < 并开始输入标签名称。IntelliJ IDEA 显示当前上下文中适当的标签名称列表。使用 ArrowUp 和 ArrowDown 按钮滚动列表。
- 按 Enter 可从列表中接受选择。IntelliJ IDEA 根据模式自动插入必需属性。
插入 taglib 声明
- 开始输入一个标签并按 Ctrl+Alt+Space。
- 从列表中选择一个标签。它所属的 taglib 的 uri 显示在方括号中。
- 选择所需的 taglib 并按 Enter。IntelliJ IDEA 添加所选 taglib 的声明:
导入 taglib 声明
- 开始输入 taglib 前缀,然后按 Alt+Insert。
- 从列表中选择一个 taglib,然后按 Enter。
Hippie 完成:基于上下文扩展单词
Hippie 完成是一个完成引擎,它可以在可视范围内分析您的文本,并从当前的背景中提取完成提案。它可以帮助您用关键字、类名、方法或变量填写完成一个单词。
要将插入符号的字符串扩展到现有单词,请执行以下操作:
- 键入初始字符串并执行以下操作之一:
- 按 Alt+Slash 或选择代码| 完成| 循环展开 Word(Code | Completion | Cyclic Expand Word)在插入符号之前搜索匹配的单词
- 按 Shift+Alt+Slash 或选择代码| 完成| 循环展开 Word(向后)(Code | Completion | Cyclic Expand Word (Backward)) 在插入符号和其他打开的文件之后搜索匹配的单词。
将显示第一个建议的值,并在源代码中突出显示原型:
- 按 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 将显示包括您在任何位置输入的字符的建议。
这使得通配符的使用是不必要的:
在 CamelCase 或 snake_case 名称的情况下,仅键入初始字母。IntelliJ IDEA 自动识别并匹配初始字母。
接受建议
您可以通过以下方式之一接受列表中的建议:
- 按 Enter 或双击所需的选项将从插入符号左侧完成插入。
- 按 Tab 可将字符从插入符号向右替换。
- 使用 N/A 使当前代码构造语法正确(平衡括号,添加缺少的大括号和分号等)
否定表达式
从建议列表中选择后,您可以通过按下 ! 来否定 Java 中的表达式:
表达将被否定:
如果在 "代码完成设置" 页中启用了 "插入点"、"空格" 等选项来插入选定的变体代码完成设置页面,或显式调用代码完成,或者显式更改 "建议" 列表中的选定内容, 则否定表达式的工作方式。
查看参考信息
- 当您在 "建议" 列表中选择一个条目时,可以通过按 Ctrl + Shift + I 来使用 "快速定义" :
- 在 "建议" 列表中选择一个条目时,可以通过按 Ctrl + Q 来使用 "快速信息" :
在建议列表中排序条目
IntelliJ IDEA 排序图标仅在列表较长且不显示仅包含少数条目的列表时才会出现。
您可以按照字母顺序或相关性对建议列表进行排序。要在这些模式之间切换,请单击 或 ,它们分别位于列表的右下角。
IntelliJ IDEA 将记住您的选择。您可以在 "代码完成设置" 页中更改默认行为。
查看代码层次结构
当您从建议列表中选择一个条目时,您可以查看代码层次结构:
- 按 Ctrl+H 查看类型层次结构;
- 按 Ctrl+Alt+H 查看调用层次结构;
- 按 Ctrl+Shift+H 查看方法层次结构。