Loading...

文章背景图

codecompanion.nvim:把 Copilot Chat 与 Zed AI 搬进 Neovim 的 Vim 风 AI 编程

2026-10-26
0
- 字
- 分钟
|

codecompanion.nvim 界面

官方信息

项目名称codecompanion.nvim
仓库地址https://github.com/olimorris/codecompanion.nvim
官方网站https://codecompanion.olimorris.dev/
最新更新时间2026-10-26(最新 Release v20.0.1,2026-10-17)
项目定位Neovim 里的"AI Coding, Vim Style"——集 Copilot Chat、Zed AI 聊天、CLI Agent(Claude Code/Codex)于一体的智能编程助手,支持 Anthropic、DeepSeek、Gemini、GitHub Copilot、Ollama 等众多适配器

项目背景

用过 VS Code 的 Copilot Chat 或 Zed 的 AI 面板的人,都习惯了"侧边栏里和大模型对话、让它直接改你工程里的文件"。CodeCompanion.nvim 做的就是把这套体验原汁原味搬进 Neovim,而且坚持 "Vim Style"——不绑鼠标、一切键位可定制、diff 用 Neovim 原生窗口渲染。

它由资深 Neovim 插件作者 olimorris 维护,目前 GitHub 上已有近 7k Star。和单纯做"补全"的插件不同,CodeCompanion 是一个完整的 Agent 工作台:你可以在聊天缓冲区里让模型读文件、跑命令、搜索网页、写代码、给出 diff,然后你按 g2 接受、g3 拒绝,整个流程和 Cursor 类似,但全程在终端里完成。

它最被称道的一点是适配器(Adapter)生态:默认走 GitHub Copilot,但你可以一键切到 Anthropic、OpenAI、Gemini、DeepSeek、Mistral、OpenRouter,甚至接本地 Ollama;更进一步,它还能把 Claude Code、Codex、Gemini CLI、opencode 这些"命令行 Agent"当成后端,直接在 Neovim 里驱动它们干活。

核心特性

  • Copilot Chat 式聊天::CodeCompanionChat 打开聊天缓冲区,支持 #{buffer}、#{diagnostics}、#{selection}、#{terminal} 等编辑器上下文注入。
  • Agent 工具调用:用 @{files} 让模型读写文件,用 @{agent} 让它自主跑命令,工具执行前需你审批(g1 总是允许 / g2 本次允许 / g3 拒绝)。
  • 内联编辑:选中代码后 :'<,'>CodeCompanion Use early returns,模型原地改写选区并出 diff。
  • 代码评审::CodeCompanionCodeReview 逐文件、逐 hunk 展示所有改动,可逐条接受/回退/评论。
  • Prompt 库:内置 /explain、/fix、/lsp、/commit 等斜杠命令,也可自定义。
  • 多适配器:Anthropic、OpenAI、Gemini、DeepSeek、Mistral、OpenRouter、Ollama、OpenAI 兼容网关;以及 Claude Code、Codex 等 CLI Agent。
  • 生态扩展:支持 render-markdown.nvim 渲染 Markdown、img-clip.nvim 贴截图、mcphub.nvim 接 MCP。

环境要求

  • Neovim:0.12 或更高版本(注意:要求较新,旧版 Nvim 无法运行)。
  • 依赖:plenary.nvim、curl。
  • 可选:Tree-sitter yaml 解析器(Prompt 库/skills 用)、file 命令(图片 MIME 检测)、ripgrep(grep_search 工具)、sqlite3(读 Copilot token)。
  • API Key:至少一个服务商的 Key(Anthropic / DeepSeek / Gemini 等),或已登录 copilot.lua。

详细部署步骤

第一步:升级 Neovim 到 0.12+

CodeCompanion 对 Neovim 版本要求较高,先确认:

nvim --version   # 第一行必须 >= v0.12.0

Ubuntu 22.04 自带版本偏旧,可用官方 AppImage 或源码安装:

# 方式一:下载 AppImage
mkdir -p ~/apps && cd ~/apps
wget https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage
chmod +x nvim-linux-x86_64.appimage
./nvim-linux-x86_64.appimage --version

# 方式二:用 snap/ppa(如系统支持)
# sudo add-apt-repository ppa:neovim-ppa/unstable && sudo apt update && sudo apt install neovim

第二步:安装插件(pin 版本,避免 breaking changes)

lazy.nvim 用户新建 ~/.config/nvim/lua/plugins/codecompanion.lua:

return {
  "olimorris/codecompanion.nvim",
  version = "^20.0.0",          -- 重要:pin 到大版本,避免上游 breaking change
  dependencies = {
    "nvim-lua/plenary.nvim",
    "nvim-treesitter/nvim-treesitter",
  },
  opts = {
    -- 见第三步
  },
}

保存后重启 Nvim,执行 :Lazy sync。然后运行健康检查:

:checkhealth codecompanion

按提示补齐缺失依赖(如 :TSInstall yaml)。

第三步:配置适配器(Adapter)

默认适配器是 GitHub Copilot。如果你没有 Copilot,需要自己指定。下面给两种常见配置。

方案 A:用 DeepSeek(国内友好,便宜)

export DEEPSEEK_API_KEY="sk-xxxxxxxx"
require("codecompanion").setup({
  strategies = {
    chat = {
      adapter = "deepseek",        -- 或 "anthropic" / "openai" / "gemini"
    },
    inline = {
      adapter = "deepseek",
    },
  },
})

方案 B:用本地 Ollama

ollama pull qwen3:8b
require("codecompanion").setup({
  strategies = {
    chat = {
      adapter = {
        name = "ollama",
        model = "qwen3:8b",
      },
    },
    inline = {
      adapter = {
        name = "ollama",
        model = "qwen3:8b",
      },
    },
  },
})

方案 C:接入任意 OpenAI 兼容网关

require("codecompanion").setup({
  strategies = {
    chat = {
      adapter = require("codecompanion.adapters").extend("openai_compatible", {
        env = {
          api_key = "CUSTOM_API_KEY",
          url = "https://your-gateway.example.com/v1",
        },
        schema = { model = { default = "your-model-name" } },
      }),
    },
  },
})

第四步:配置键位(作者推荐)

CodeCompanion 默认不设置任何全局键位,把下面这段加到你的 init.lua:

vim.keymap.set({ "n", "v" }, "<C-a>", "<cmd>CodeCompanionActions<cr>", { noremap = true, silent = true })
vim.keymap.set({ "n", "v" }, "<LocalLeader>a", "<cmd>CodeCompanionChat Toggle<cr>", { noremap = true, silent = true })
vim.keymap.set("v", "ga", "<cmd>CodeCompanionChat Add<cr>", { noremap = true, silent = true })
-- 命令行里把 cc 展开成 CodeCompanion
vim.cmd([[cab cc CodeCompanion]])

第五步:启动验证

重启 Nvim,打开一个项目里的代码文件,执行:

:CodeCompanionChat

右侧(或新 split)会打开聊天缓冲区。在输入框里输入:

What does the code in #{buffer} do?

按 <CR>(普通模式)或 <C-s>(插入模式)发送。让模型改代码则输入:

@{files} Add a docstring to each function in #{buffer}

模型会生成 diff,按 g2 接受、g3 拒绝。最后用 :CodeCompanionCodeReview 统一过一遍所有改动。

常见坑与解决办法

  • 启动报错 / 功能异常:90% 是 Neovim 版本低于 0.12。先 nvim --version 确认。
  • 401 / 没反应:API Key 没读到。确认 DEEPSEEK_API_KEY 等环境变量已 export 并重启 Nvim。
  • 聊天里 Markdown 不渲染:装 render-markdown.nvim 或 markview.nvim,并把 codecompanion 加进其 ft 列表。
  • plenary 兼容问题:官方提示若 pin 了插件版本,要把 plenary.nvim 留在 master 分支(见 issue #377)。
  • 工具审批太频繁:信任后按 gty 进入自动批准模式。

使用方法示例

典型工作流:在一个陌生的 Lua 文件里按 <LocalLeader>a 唤出聊天,输入 #{buffer} 请逐段解释这段代码;选中一个写得啰嗦的函数按 ga 加入聊天,再说"用 early return 重写它";模型给出 diff 后按 g2 接受;最后 :CodeCompanion /commit 让它帮你写提交信息。

常见问题 FAQ

Q1:它和 Copilot 补全插件冲突吗?
A:不冲突。CodeCompanion 做聊天/Agent,补全交给 minuet、llm.nvim 这类插件即可。

Q2:可以只用来聊天、不让它改文件吗?
A:可以。不添加 @{files} 工具时,模型只能对话,无法触碰磁盘。

Q3:支持接 Claude Code 吗?
A:支持。把 adapter 设为 claude_code,需先装好 Claude Code 并配置 ACP token。

Q4:收费吗?
A:插件本身 GPL 开源免费,你只需承担所选 LLM 服务商的 API 费用。

跳转链接

评论交流

文章目录