--- title: "代码智能" description: "代码补全、导航、查找用法、文档、层次结构与文件结构,以及这些结果从哪里来。" --- ## 结果从哪里来 代码智能有两个来源: - **语言服务器。** 每种语言在 `languages/.toml` 中配置一个或多个 [LSP](https://microsoft.github.io/language-server-protocol/) 服务器(例如 Python 用 basedpyright 和 Ruff,Rust 用 rust-analyzer,Java 用 JDT LS)。打开某种语言的文件时,对应的服务器随之启动,负责补全、导航、用法、文档、诊断、格式化和重构。一种语言可以同时由多个服务器提供服务,结果会合并。 - **IDE 自己的索引和语法树。** OpenIDEA 用内置的 tree-sitter 语法解析文件,并在后台为项目的文件和符号建立索引。转到文件 / 类 / 符号、结构视图、代码折叠、扩展选区和语法高亮都依赖它;没有可用的语言服务器时,它也是兜底:导航、查找用法、局部变量重命名和引入变量会根据语法树完成能确定的部分,查找用法会把同名匹配作为文本出现列出。 缺少某个语言服务器时,会弹出通知提示安装。已安装的服务器、版本和设置在 **设置 › 语言和框架 › 语言服务器** 中管理。状态栏的 **语言服务** 微件显示当前项目运行着哪些服务器,并可以重启它们。各语言具体用什么,见 [语言](/zh/languages/index)。 插件可以在此基础上再提供补全项、快速修复等功能,详见“插件”标签页。 ## 代码补全 | 操作 | macOS | Windows / Linux | | -------------------------- | -------- | --------------- | | **代码 › 代码补全 › 基本** | `⌃Space` | `Ctrl+Space` | | **循环补全单词** | `⌥/` | `Alt+/` | | **循环补全单词(反向)** | `⌥⇧/` | `Alt+Shift+/` | | **形参信息** | `⌘P` | `Ctrl+P` | 输入时补全列表会自动弹出。`↵` / `Enter` 插入选中项,`⇥` / `Tab` 替换光标后的剩余标识符。选中项的文档显示在列表旁边。实时模板和后缀模板也会出现在列表中(见 [Live Templates](/zh/guide/templates))。 输入 `(` 和 `,` 后会自动显示形参信息,`⇥` / `⇧⇥` 在参数之间切换。 **循环补全单词** 不依赖语言服务器,用当前文件和其他已打开编辑器里的单词补全光标处的词,连续按会依次切换候选。 补全的行为(大小写匹配、唯一候选时自动插入、排序、自动补括号、何时显示文档)在 **设置 › 编辑器 › 常规 › 代码补全** 中设置。**设置 › 编辑器 › 常规 › 自动导入** 控制粘贴时插入导入,以及自动添加无歧义的导入。 ### 内联补全 支持 LSP 内联补全的语言服务器会在输入时于光标处显示灰色建议。可以在 **设置 › 编辑器 › 常规 › 内联补全** 中关闭它、改为停止输入一段时间后再显示,或只对部分语言启用。 | 操作 | macOS | Windows / Linux | | ----------------------------------- | ----------- | ----------------- | | **调用内联补全** | `⌥\` | `Alt+\` | | **插入内联建议** | `⇥` | `Tab` | | **插入内联建议:下一个单词** | `⌘→` | `Ctrl+Right` | | **显示下一个内联建议** / **上一个** | `⌥]` / `⌥[` | `Alt+]` / `Alt+[` | | **隐藏内联建议** | `Esc` | `Esc` | ## 导航 | 操作 | macOS | Windows / Linux | | ------------------------------- | ------------------ | ---------------------------------- | | **转到声明或用法** | `⌘B` 或 `⌘`+单击 | `Ctrl+B` 或 `Ctrl`+单击 | | **转到实现** | `⌥⌘B` 或 `⌥⌘`+单击 | `Ctrl+Alt+B` 或 `Ctrl+Alt`+单击 | | **转到类型声明** | `⇧⌘B` | `Ctrl+Shift+B` | | **超方法** | `⌘U` | `Ctrl+U` | | **导航 › 测试** | `⇧⌘T` | `Ctrl+Shift+T` | | **后退** / **前进** | `⌘[` / `⌘]` | `Ctrl+Alt+Left` / `Ctrl+Alt+Right` | | **下一个方法** / **上一个方法** | `⌃⇧↓` / `⌃⇧↑` | `Alt+Down` / `Alt+Up` | - 在声明本身上执行 **转到声明或用法**,会改为显示它的用法。 - 按住 `⌘` / `Ctrl` 把鼠标悬停在名称上,名称会显示为链接,并附带简要信息。 - 装订区域的图标标出被实现或被重写的类型和方法(↓),以及实现或重写了其他方法的方法(↑),单击即可跳转。 - **导航 › 测试** 按命名约定在类和它的测试之间跳转;还没有测试时会提供 **创建新测试…**。 按名称跳转到文件、类和符号,见 [搜索与导航](/zh/guide/search)。 ## 查找用法 | 操作 | macOS | Windows / Linux | | --------------------------------- | ------------- | ------------------------------- | | **查找用法** | `⌥F7` | `Alt+F7` | | **显示用法** | `⌥⌘F7` | `Ctrl+Alt+F7` | | **高亮文件中的用法** | `⇧⌘F7` | `Ctrl+Shift+F7` | | **下一个高亮的用法** / **上一个** | `⌃⌥↓` / `⌃⌥↑` | `Ctrl+Alt+Down` / `Ctrl+Alt+Up` | **查找用法** 把结果按文件分组列在 **查找用法** 工具窗口中,并带预览。**显示用法** 在光标处用弹窗显示。移动光标时,编辑器会自动高亮光标下符号的所有出现位置。 声明上方会显示用法数量(如 `3 usages`)和这段代码最后的作者(来自 Git blame)。可以在 **设置 › 编辑器 › 嵌入提示** 的 **Code Vision** 一节中关闭。 ## 文档与信息 | 操作 | macOS | Windows / Linux | | ------------------ | -------- | --------------- | | **快速文档** | `F1` | `Ctrl+Q` | | **快速定义** | `⌥Space` | `Ctrl+Shift+I` | | **表达式类型信息** | `⌃⇧P` | `Ctrl+Shift+P` | | **错误描述** | `⌘F1` | `Ctrl+F1` | | **上下文信息** | `⌃⇧Q` | `Alt+Q` | 鼠标在代码上停留片刻,会显示文档以及指针下的问题。在 **快速文档** 弹窗中,链接会在原地打开其他符号的文档,`←` / `→` 前后翻看,`F4` 跳到源代码。弹窗获得焦点时再按 `F1`,会把它移到 **文档** 工具窗口;该窗口打开期间,`F1` 的文档都会显示在窗口里而不是弹窗中。 **快速定义** 在弹窗中显示定义的源代码,不用离开当前文件。**上下文信息** 显示光标周围的声明行(类、方法、代码块的开头),在它们已经滚出视野时很有用。 ## 嵌入提示 参数名、推断出的类型以及其他细节(例如链式调用的类型)的内联提示由语言服务器提供。可以在 **设置 › 编辑器 › 嵌入提示** 中按种类和语言开关,也可以右键单击某个提示来关闭这一类。提示中指向声明的部分可以 `⌘`+单击 / `Ctrl`+单击跳转过去。 ## 结构与层次结构 | 操作 | macOS | Windows / Linux | | ----------------- | ------ | --------------- | | **文件结构** | `⌘F12` | `Ctrl+F12` | | **结构** 工具窗口 | `⌘7` | `Alt+7` | | **调用层次结构** | `⌃⌥H` | `Ctrl+Alt+H` | | **类型层次结构** | `⌃H` | `Ctrl+H` | **文件结构** 弹出当前文件的声明列表,输入文字过滤,按 `↵` / `Enter` 跳转。**结构** 工具窗口显示同样的大纲,可通过它的工具栏设置跟随光标。编辑器顶部或底部的痕迹导航显示光标所在位置,位置和适用语言在 **设置 › 编辑器 › 常规 › 痕迹导航** 中设置。 **调用层次结构** 和 **类型层次结构** 在 **层次结构** 工具窗口中打开,展开时逐级加载。它们需要语言服务器支持 LSP 的调用层次和类型层次请求。 ## 生成代码 | 操作 | macOS | Windows / Linux | | ------------- | ----- | --------------- | | **生成…** | `⌘N` | `Alt+Insert` | | **实现方法…** | `⌃I` | `Ctrl+I` | | **重写方法…** | `⌃O` | `Ctrl+O` | 这些命令列出语言服务器在光标处能生成的内容(构造函数、getter 和 setter、缺失的成员等),可选项因语言而异。快速修复和意图操作见 [代码检查](/zh/guide/inspections),重构见 [重构](/zh/guide/refactoring)。 ## 语义高亮 除了语法高亮,还会应用语言服务器语义令牌(semantic tokens)提供的颜色。**语义高亮**(每个局部变量和参数名在整个文件中使用各自固定的颜色)和 **彩虹括号** 是可以在查找操作中运行的开关命令,也可以在 **设置 › 编辑器 › 配色方案** 中设置。 ## 不工作时怎么排查 - 先看状态栏的 **语言服务** 微件:服务器可能还在启动、启动失败,或者没有安装。 - 不在模块源代码目录中的文件(例如不在模块源根下的 Java 文件),部分服务器只做语法检查,编辑器顶部会有横幅说明。 - **文件 › 省电模式** 会关闭补全和形参信息的自动弹出、悬停文档、用法高亮、用法提示和内联补全。 - 项目打开后索引在后台进行。搜索会先用已经建好的索引给出结果,索引完成后结果才完整。 - 更多检查项和日志位置见 [故障排查](/zh/reference/troubleshooting)。