跳转到主要内容
OpenIDEA 用一个小的定义文件 languages/<id>.toml 描述每种语言:哪些文件属于这种语言、怎么高亮,以及由哪个语言服务器和调试适配器提供代码智能和调试。语言服务器提供的能力(补全、导航、诊断、重构)对所有语言都通过同一套编辑器功能呈现。

语言支持的工作方式

打开文件时,IDE 按以下顺序判断它属于哪种语言:
  1. 单个文件的 覆盖文件类型(在项目树中文件的右键菜单或编辑器标签页的右键菜单里)。
  2. 精确文件名(Dockerfile、go.mod)或文件名模式。
  3. 扩展名,优先匹配最长的(.html.erb 先于 .erb)。
  4. 文件第一行:例如 #!/usr/bin/env python3 这样的 shebang,或 <?php 这类模式。
  5. 都不匹配时按纯文本处理。
在 设置 › 编辑器 › 文件类型(已识别的文件类型)中可以为某种语言添加或移除文件名模式。 识别出语言后,支持分为几层:
  • 高亮 即时生效:来自编辑器里的 CodeMirror 模式;语言没有对应模式时,改用内置的 tree-sitter 语法。
  • 结构(大纲、折叠、项目索引中的符号)来自内置的 tree-sitter 语法,无需任何配置。
  • 代码智能 来自一个或多个语言服务器(LSP)。打开文件时 IDE 启动它们,并把最近的、包含该服务器根标记(Cargo.toml、package.json、pom.xml 等)的目录作为工作区根目录。
  • 调试 来自调试适配器(DAP)。
语言服务器和调试适配器会运行你机器上的程序,所以只在你信任的项目中启动。

一种语言多个服务器

一种语言可以配置多个服务器:
  • 备选(下表中写作 a → b):只运行第一个已安装的。例如 Python 默认用 basedpyright,只有它缺失时才退回 pyright、ty 或 pyrefly。在 设置 › 语言和框架 › 语言服务器 中可以指定其中一个,或选 自动(使用第一个可用的)。
  • 附加(写作 + b):和主服务器同时运行,通常只在用到它的项目中启用。带 Ruff 配置的项目里 Ruff 与 basedpyright 一起运行;带 oxlint 配置的项目里 oxlint 与 vtsls 一起运行;Angular 和 Laravel 项目里分别加上 Angular 和 Laravel 的服务器。

安装语言服务器和调试器

OpenIDEA 不内置语言服务器。打开一个文件而它的服务器缺失时,会弹出通知提示该服务器未安装,并提供 安装 按钮;安装完成后会重新启动这种语言的代码洞察。也可以在一个页面里统一管理所有工具:
1

打开语言服务器页面

打开 设置 › 语言和框架 › 语言服务器(⌘, / Ctrl+Alt+S 后搜索”语言服务器”),或者在 查找操作…(⌘⇧A / Ctrl+Shift+A)中运行 语言服务器…。
2

找到工具

按工具或语言过滤。每一项都会显示它是由 IDE 安装的、在 PATH 上找到的、指定了自定义可执行文件,还是缺失。
3

安装,或指向自己的版本

点击 安装(或 重新安装)让 IDE 安装;也可以把 可执行文件 设为你自己安装的程序。
IDE 安装工具从不需要 sudo。工具装在本地数据目录下 IDE 自己的工具文件夹里(见 数据目录与日志),按工具选用合适的安装方式: 查找服务器时,IDE 先看设置中指定的可执行文件,再看自己的工具文件夹,最后看 PATH。IDE 无法安装的服务器(例如随 Swift 工具链提供的 sourcekit-lsp,或 Godot 编辑器自带的服务器)会显示安装提示。
下载 GitHub release 时,如果有 GITHUB_TOKEN、GH_TOKEN 或 gh 登录信息,IDE 会使用它们,避免匿名 API 的频率限制。

配置服务器

在语言服务器页面选中一个语言服务器即可看到它的设置,这些设置保存在 languageServers.<name> 下(全局或项目级):
  • 关闭该服务器,或在多个备选中选择运行哪一个;
  • 可执行文件:要启动的程序;
  • 启动:实参、环境变量 和 初始化选项(修改后会重启服务器);
  • 工作区配置:用于响应服务器的 workspace/configuration 请求,修改后无需重启即可生效。
添加语言服务器… 用来注册任何定义里都没有的服务器:填写它的命令、服务的语言和根标记即可。

支持矩阵

下表列出全部内置语言定义。加粗 的服务器和调试器可以在 IDE 中一键安装,其余需要自行安装(IDE 中的安装提示会说明方法)。“高亮”和”Tree-sitter”两列分别表示是否有即时高亮,以及是否有用于大纲和折叠的内置语法。 说明:
  • C、C++、Objective-C、Swift:lldb-dap 随 LLVM 或 Xcode 提供。C 和 C++ 也可以用 CodeLLDB 或 GDB 14 及以上版本调试,见 C 与 C++。
  • Ruby:rdbg 来自 debug gem。
  • GDScript:语言服务器和调试器就是 Godot 编辑器本身,见 Godot。
  • Arduino:需要 Arduino IDE 2(包含 Arduino Language Server、Arduino CLI 和 clangd)。
  • Vue:Vue 服务器和 vtsls 同时运行,TypeScript 部分由 vtsls 处理。

运行、测试与调试

运行配置根据项目中的构建文件自动检测。下表列出各生态会检测出哪些配置,用法见 运行配置、测试 和 调试。 TypeScript、Python、Rust、Go、Java、Kotlin 和 PHP 的运行、测试(含测试树和 重新运行失败的测试)与调试,都在示例项目上做了端到端测试;C 和 C++ 也测试了调试。这几种语言(TypeScript、Python、Rust、Go、Java、Kotlin、PHP)的代码智能都用真实的语言服务器做了测试。

修改或添加语言

  • 要修改内置定义,在配置目录的 languages 文件夹里放一个 id 相同的文件,下次启动时它会替换内置定义。格式见 添加新语言。
  • 插件也可以添加语言,并带上自己的服务器和调试器,见 语言功能。