> ## Documentation Index
> Fetch the complete documentation index at: https://openidea.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# 代码智能

> 代码补全、导航、查找用法、文档、层次结构与文件结构，以及这些结果从哪里来。

## 结果从哪里来

代码智能有两个来源：

* **语言服务器。** 每种语言在 `languages/<id>.toml` 中配置一个或多个 [LSP](https://microsoft.github.io/language-server-protocol/) 服务器（例如 Python 用 basedpyright 和 Ruff，Rust 用 rust-analyzer，Java 用 JDT LS）。打开某种语言的文件时，对应的服务器随之启动，负责补全、导航、用法、文档、诊断、格式化和重构。一种语言可以同时由多个服务器提供服务，结果会合并。
* **IDE 自己的索引和语法树。** OpenIDEA 用内置的 tree-sitter 语法解析文件，并在后台为项目的文件和符号建立索引。转到文件 / 类 / 符号、结构视图、代码折叠、扩展选区和语法高亮都依赖它；没有可用的语言服务器时，它也是兜底：导航、查找用法、局部变量重命名和引入变量会根据语法树完成能确定的部分，查找用法会把同名匹配作为文本出现列出。

缺少某个语言服务器时，会弹出通知提示安装。已安装的服务器、版本和设置在 **设置 › 语言和框架 › 语言服务器** 中管理。状态栏的 **语言服务** 微件显示当前项目运行着哪些服务器，并可以重启它们。各语言具体用什么，见 [语言](https://openidea.sh/zh/languages/index.md)。

插件可以在此基础上再提供补全项、快速修复等功能，详见“插件”标签页。

## 代码补全

| 操作 | macOS | Windows / Linux |
| - | - | - |
| **代码 › 代码补全 › 基本** | `⌃Space` | `Ctrl+Space` |
| **循环补全单词** | `⌥/` | `Alt+/` |
| **循环补全单词（反向）** | `⌥⇧/` | `Alt+Shift+/` |
| **形参信息** | `⌘P` | `Ctrl+P` |

输入时补全列表会自动弹出。`↵` / `Enter` 插入选中项，`⇥` / `Tab` 替换光标后的剩余标识符。选中项的文档显示在列表旁边。实时模板和后缀模板也会出现在列表中（见 [Live Templates](https://openidea.sh/zh/guide/templates.md)）。

输入 `(` 和 `,` 后会自动显示形参信息，`⇥` / `⇧⇥` 在参数之间切换。

**循环补全单词** 不依赖语言服务器，用当前文件和其他已打开编辑器里的单词补全光标处的词，连续按会依次切换候选。

补全的行为（大小写匹配、唯一候选时自动插入、排序、自动补括号、何时显示文档）在 **设置 › 编辑器 › 常规 › 代码补全** 中设置。**设置 › 编辑器 › 常规 › 自动导入** 控制粘贴时插入导入，以及自动添加无歧义的导入。

### 内联补全

支持 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` 把鼠标悬停在名称上，名称会显示为链接，并附带简要信息。
* 装订区域的图标标出被实现或被重写的类型和方法（↓），以及实现或重写了其他方法的方法（↑），单击即可跳转。
* **导航 › 测试** 按命名约定在类和它的测试之间跳转；还没有测试时会提供 **创建新测试…**。

按名称跳转到文件、类和符号，见 [搜索与导航](https://openidea.sh/zh/guide/search.md)。

## 查找用法

| 操作 | 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、缺失的成员等），可选项因语言而异。快速修复和意图操作见 [代码检查](https://openidea.sh/zh/guide/inspections.md)，重构见 [重构](https://openidea.sh/zh/guide/refactoring.md)。

## 语义高亮

除了语法高亮，还会应用语言服务器语义令牌（semantic tokens）提供的颜色。**语义高亮**（每个局部变量和参数名在整个文件中使用各自固定的颜色）和 **彩虹括号** 是可以在查找操作中运行的开关命令，也可以在 **设置 › 编辑器 › 配色方案** 中设置。

## 不工作时怎么排查

* 先看状态栏的 **语言服务** 微件：服务器可能还在启动、启动失败，或者没有安装。
* 不在模块源代码目录中的文件（例如不在模块源根下的 Java 文件），部分服务器只做语法检查，编辑器顶部会有横幅说明。
* **文件 › 省电模式** 会关闭补全和形参信息的自动弹出、悬停文档、用法高亮、用法提示和内联补全。
* 项目打开后索引在后台进行。搜索会先用已经建好的索引给出结果，索引完成后结果才完整。
* 更多检查项和日志位置见 [故障排查](https://openidea.sh/zh/reference/troubleshooting.md)。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.