mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-14 16:07:52 +00:00
130 lines
9.8 KiB
Plaintext
130 lines
9.8 KiB
Plaintext
---
|
||
title: "代码智能"
|
||
description: "代码补全、导航、查找用法、文档、层次结构与文件结构,以及这些结果从哪里来。"
|
||
---
|
||
|
||
## 结果从哪里来
|
||
|
||
代码智能有两个来源:
|
||
|
||
- **语言服务器。** 每种语言在 `languages/<id>.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)。
|