OpenCode 如何通过 ACP 协议让你的编辑器更智能

100 次阅读

OpenCode 如何通过 ACP 协议让你的编辑器更智能

如果你正在使用 OpenCode,可能会想:能不能直接在我常用的编辑器里使用它,而不是每次都切换到终端?好消息是,OpenCode 现在支持 ACP 协议了,这意味着你可以在 Zed、JetBrains、Neovim 等编辑器中无缝使用 OpenCode 的所有功能。

什么是 ACP 协议

ACP(Agent Client Protocol)是一个开放协议,它的作用是让代码编辑器和 AI 编码助手能够"说同一种语言"。想象一下,以前每个编辑器都有自己的一套对接方式,开发者要适配不同编辑器就得写很多重复代码。有了 ACP,就像大家约定了一个统一的接口标准,编辑器和 AI 工具之间的沟通变得简单多了。

如果你想深入了解 ACP 协议的技术细节和设计理念,可以查看这篇文章:什么是 ACP

OpenCode 的 ACP 支持能带来什么

通过 ACP 协议,你可以直接在编辑器里调用 OpenCode,不需要在终端和编辑器之间来回切换。更重要的是,OpenCode 通过 ACP 使用时,功能和在终端里用是完全一样的——所有内置工具、自定义命令、MCP 服务器配置、项目规则等都能正常工作。

唯一需要注意的是,目前有几个内置命令(像 /undo/redo)暂时还不支持,不过这不影响日常使用的核心功能。

如何在你的编辑器中配置 OpenCode

配置的核心其实很简单:让编辑器运行 opencode acp 这个命令。这个命令会把 OpenCode 作为一个子进程启动,然后通过 JSON-RPC 协议在标准输入输出(stdio)上和编辑器通信。听起来有点技术化,但实际配置起来只需要改几行配置文件。

下面我们来看看不同编辑器的具体配置方法。

各编辑器的具体配置方法

Zed 编辑器

如果你用的是 Zed,打开配置文件 ~/.config/zed/settings.json,加入这段配置:

json
{
  "agent_servers": {
    "OpenCode": {
      "command": "opencode",
      "args": ["acp"]
    }
  }
}

配置好之后,在命令面板里执行 agent: new thread 就能启动 OpenCode 了。

如果你想更方便一点,还可以给它绑定一个快捷键。编辑 keymap.json 文件:

json
[
  {
    "bindings": {
      "cmd-alt-o": [
        "agent::NewExternalAgentThread",
        {
          "agent": {
            "custom": {
              "name": "OpenCode",
              "command": {
                "command": "opencode",
                "args": ["acp"]
              }
            }
          }
        }
      ]
    }
  }
]

这样按 Cmd+Alt+O(Mac)就能快速启动 OpenCode 了。

JetBrains 系列 IDE

用 IntelliJ IDEA、PyCharm 或其他 JetBrains IDE 的话,需要在 acp.json 文件里添加配置。注意这里的 command 需要写 OpenCode 的绝对路径:

json
{
  "agent_servers": {
    "OpenCode": {
      "command": "/absolute/path/bin/opencode",
      "args": ["acp"]
    }
  }
}

记得把 /absolute/path/bin/opencode 替换成你实际安装 OpenCode 的路径。配置完成后,在 AI Chat 的代理选择器里就能看到 OpenCode 选项了。

Avante.nvim

如果你是 Neovim 用户,并且用的是 Avante.nvim 插件,配置方式是这样的:

lua
{
  acp_providers = {
    ["opencode"] = {
      command = "opencode",
      args = { "acp" }
    }
  }
}

如果你需要传递 API Key 之类的环境变量,可以这样配置:

lua
{
  acp_providers = {
    ["opencode"] = {
      command = "opencode",
      args = { "acp" },
      env = {
        OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
      }
    }
  }
}

CodeCompanion.nvim

另一个 Neovim 插件 CodeCompanion.nvim 的配置稍有不同,需要在 setup 函数里指定:

lua
require("codecompanion").setup({
  interactions = {
    chat = {
      adapter = {
        name = "opencode",
        model = "claude-sonnet-4",
      },
    },
  },
})

这里默认使用的是 claude-sonnet-4 模型。如果你需要配置环境变量,可以参考 CodeCompanion.nvim 官方文档中关于"配置适配器:环境变量"的部分。

功能支持情况

通过 ACP 使用 OpenCode,你能用到的功能包括:

  • 文件操作、终端命令等内置工具
  • 你自己定义的工具和斜杠命令
  • OpenCode 配置中的 MCP 服务器
  • 项目里 AGENTS.md 文件定义的规则
  • 自定义的代码格式化和检查工具
  • 完整的代理和权限系统

目前唯一的限制是,/undo/redo 这两个命令暂时还不能用。不过对于日常的代码编写、重构、调试等工作来说,这个限制影响不大。

开始使用

配置完成后,你就可以在编辑器里直接和 OpenCode 对话了。体验上和在终端里用基本一样,但更方便的是,你不需要离开编辑器就能完成所有操作。

如果你还没试过 OpenCode 的 ACP 支持,不妨花几分钟配置一下。对于经常需要在编辑器和终端之间切换的开发者来说,这个功能能省下不少时间,让你的工作流程更流畅。

感谢阅读,如果觉得有用欢迎分享
返回 AI工具配置