opencode.nvim
opencode.nvim 是一款专为 Neovim 打造的 AI 编程助手插件,旨在让开发者在不离开编辑器的情况下,无缝集成 OpenCode AI 能力,保持流畅的编码心流。它解决了传统 AI 工具需要频繁切换窗口、手动复制上下文代码的痛点,让你直接在熟悉的 Vim 环境中与 AI 对话、生成代码并应用修改。
这款工具特别适合习惯使用 Neovim 的软件开发者和工程师。其核心亮点在于深度的"Vim 原生”体验:不仅支持可视选择、操作符范围(如 go 命令)和点重复(dot-repeat)等经典 Vim 特性,还能自动共享当前缓冲区、选中内容甚至诊断信息作为 AI 上下文。用户可以直接在编辑器内查看 AI 生成的差异对比,灵活选择接受、拒绝或重载修改,并通过内置的 LSP 协议实现低延迟交互。此外,它还提供了丰富的提示词库和可定制的快捷键,配合简单的默认配置,帮助用户快速构建高效的 AI 辅助开发工作流。无论是日常代码补全还是复杂的重构任务,opencode.nvim 都能让 AI 真正成为你指尖的自然延伸。
使用场景
资深后端工程师正在重构一个遗留的 Python 微服务模块,需要在不离开编辑器的情况下,让 AI 协助优化复杂的异步逻辑并修复类型错误。
没有 opencode.nvim 时
- 上下文割裂严重:必须手动复制代码片段粘贴到外部 AI 网页端,再切回编辑器粘贴结果,频繁切换窗口打断了深度思考的心流。
- 上下文传递繁琐:为了让 AI 理解报错原因,需额外复制堆栈信息和相关依赖文件,沟通成本极高且容易遗漏关键细节。
- 操作效率低下:无法直接对选中的多行代码或特定函数范围发起指令,每次交互都像是在进行“搬运工”式的机械劳动。
- 审查流程断裂:AI 返回的代码需要人工逐行比对差异,缺乏原生的接受或拒绝机制,极易引入细微的逻辑偏差。
使用 opencode.nvim 后
- 沉浸式交互体验:直接在 Neovim 内通过
<C-a>唤起对话框,利用@this自动带入当前选中代码或光标上下文,全程无需切换窗口。 - 智能上下文感知:只需输入简短提示词,opencode.nvim 自动将缓冲区内容、诊断错误(diagnostics)及可见代码作为背景信息发送给 AI,精准度大幅提升。
- 原生 Vim 操作习惯:支持可视模式选区和 Dot-repeat(
.重复命令),可像执行宏一样对多个相似函数批量应用相同的重构指令。 - 闭环代码审查:AI 生成的修改建议以 Diff 形式直接呈现在编辑器中,可一键接受、拒绝或重新加载,确保每一行变更都在掌控之中。
opencode.nvim 通过将 AI 能力无缝融入 Neovim 的原生工作流,让开发者在保持极致心流的同时,实现了从“询问代码”到“即时演进代码”的效率飞跃。
运行环境要求
- 未说明
未说明
未说明

快速开始
opencode.nvim
https://github.com/user-attachments/assets/077daa78-d401-4b8b-98d1-9ba9f94c2330
✨ 功能
- 连接到_任何_
opencode,或提供一个集成的实例 - 共享编辑器上下文(缓冲区、选区、诊断信息等)
- 带有补全、高亮和普通模式支持的输入提示
- 从库中选择提示并自定义自己的提示
- 执行命令
- 监控并响应事件
- 查看、接受或拒绝,并重新加载编辑内容
- 通过进程内 LSP 与
opencode交互 - Vim 风格 — 支持范围操作和点重复
- 简单而合理的默认设置,助你快速上手
📦 安装
lazy.nvim
{
"nickjvandyke/opencode.nvim",
version = "*", -- 最新稳定版
dependencies = {
{
-- 推荐但非强制使用 `snacks.nvim` 集成
---@module "snacks" <- 加载 `snacks.nvim` 类型以提供配置智能感知
"folke/snacks.nvim",
optional = true,
opts = {
input = {}, -- 增强 `ask()`
picker = { -- 增强 `select()`
actions = {
opencode_send = function(...) return require("opencode").snacks_picker_send(...) end,
},
win = {
input = {
keys = {
["<a-a>"] = { "opencode_send", mode = { "n", "i" } },
},
},
},
},
},
},
},
config = function()
---@type opencode.Opts
vim.g.opencode_opts = {
-- 您的配置,如有;详情请跳转到类型或字段的定义处
}
vim.o.autoread = true -- `opts.events.reload` 所需
-- 推荐/示例键位映射
vim.keymap.set({ "n", "x" }, "<C-a>", function() require("opencode").ask("@this: ", { submit = true }) end, { desc = "向 opencode 提问…" })
vim.keymap.set({ "n", "x" }, "<C-x>", function() require("opencode").select() end, { desc = "执行 opencode 操作…" })
vim.keymap.set({ "n", "t" }, "<C-.>", function() require("opencode").toggle() end, { desc = "切换 opencode" })
vim.keymap.set({ "n", "x" }, "go", function() return require("opencode").operator("@this ") end, { desc = "将范围添加到 opencode", expr = true })
vim.keymap.set("n", "goo", function() return require("opencode").operator("@this ") .. "_" end, { desc = "将行添加到 opencode", expr = true })
vim.keymap.set("n", "<S-C-u>", function() require("opencode").command("session.half.page.up") end, { desc = "向上滚动 opencode" })
vim.keymap.set("n", "<S-C-d>", function() require("opencode").command("session.half.page.down") end, { desc = "向下滚动 opencode" })
-- 如果您使用了上面带有偏好的 `<C-a>` 和 `<C-x>` 键位映射,可能需要这些设置;否则可以考虑使用 `<leader>o…`(并从 `toggle` 键位映射中移除终端模式)
vim.keymap.set("n", "+", "<C-a>", { desc = "增加光标下的数值", noremap = true })
vim.keymap.set("n", "-", "<C-x>", { desc = "减少光标下的数值", noremap = true })
end,
}
nixvim
programs.nixvim = {
extraPlugins = [
pkgs.vimPlugins.opencode-nvim
];
};
[!TIP] 安装完成后运行
:checkhealth opencode。
⚙️ 配置
opencode.nvim 提供丰富且可靠的默认体验——所有可用选项及其默认值请参见此处。
上下文
opencode.nvim 会将提示中的占位符替换为相应的上下文:
| 占位符 | 上下文 |
|---|---|
@this |
操作符范围或可视选区(如有),否则为光标位置 |
@buffer |
当前缓冲区 |
@buffers |
已打开的缓冲区 |
@visible |
可见文本 |
@diagnostics |
当前缓冲区的诊断信息 |
@quickfix |
快速修复列表 |
@diff |
Git 差异 |
@marks |
全局标记 |
@grapple |
grapple.nvim 标签 |
[!TIP]
opencode会从磁盘读取引用的文件——请保存您的更改!
提示
选择或引用提示来审查、解释并改进您的代码:
| 名称 | 提示 |
|---|---|
diagnostics |
解释 @diagnostics |
diff |
审查以下 Git 差异是否存在正确性和可读性问题:@diff |
document |
为 @this 添加注释文档 |
explain |
解释 @this 及其上下文 |
fix |
修复 @diagnostics |
implement |
实现 @this |
optimize |
优化 @this 以提升性能和可读性 |
review |
审查 @this 的正确性和可读性 |
test |
为 @this 添加测试 |
服务器
你可以按自己的方式手动运行 opencode,opencode.nvim 会自动找到它们!
[!重要] 你必须使用
--port标志来运行opencode,以暴露其服务器。
如果 opencode.nvim 找不到现有的 opencode 实例,它会使用配置的服务器为你启动一个,默认情况下会在嵌入式终端中运行。
键位映射
opencode.nvim 在嵌入式终端中设置了以下普通模式键位映射,用于类似 Neovim 的消息导航:
| 键位映射 | 命令 | 描述 |
|---|---|---|
<C-u> |
session.half.page.up |
向上滚动半页 |
<C-d> |
session.half.page.down |
向下滚动半页 |
gg |
session.first |
跳转到第一条消息 |
G |
session.last |
跳转到最后一条消息 |
<Esc> |
session.interrupt |
中断 |
自定义
以下示例使用 snacks.terminal 替代默认行为:
local opencode_cmd = 'opencode --port'
---@type snacks.terminal.Opts
local snacks_terminal_opts = {
win = {
position = 'right',
enter = false,
on_win = function(win)
-- 设置任意终端的键位映射并进行清理
require('opencode.terminal').setup(win.win)
end,
},
}
---@type opencode.Opts
vim.g.opencode_opts = {
server = {
start = function()
require('snacks.terminal').open(opencode_cmd, snacks_terminal_opts)
end,
stop = function()
require('snacks.terminal').get(opencode_cmd, snacks_terminal_opts):close()
end,
toggle = function()
require('snacks.terminal').toggle(opencode_cmd, snacks_terminal_opts)
end,
},
}
🚀 使用方法
提问 — require("opencode").ask()
输入一个提示给 opencode。
- 按
<Up>可浏览最近的提问。 - 高亮显示并补全上下文和
opencode子代理。- 按
<Tab>触发内置补全。
- 按
- 使用
\n结束提示以追加内容而非提交。 - 此外,当使用
snacks.input时:- 按
<S-CR>可追加内容而非提交。 - 通过进程内 LSP 提供补全选项。
- 按
选择 — require("opencode").select()
从所有 opencode.nvim 功能中进行选择。
- 提示
- 命令
- 服务器控制
使用 snacks.picker 时,会高亮显示并预览各项内容。
提示 — require("opencode").prompt()
向 opencode 发出提示。
- 将命名引用解析为已配置的提示。
- 注入已配置的上下文。
opencode会解释@引用的文件或子代理。
操作符 — require("opencode").operator()
将 prompt 包装为操作符,支持范围操作和点重复。
命令 — require("opencode").command()
执行 opencode 命令:
| 命令 | 描述 |
|---|---|
session.list |
列出会话 |
session.new |
开始一个新的会话 |
session.select |
选择一个会话 |
session.share |
分享当前会话 |
session.interrupt |
中断当前会话 |
session.compact |
整理当前会话(减少上下文大小) |
session.page.up |
向上滚动一页消息 |
session.page.down |
向下滚动一页消息 |
session.half.page.up |
向上滚动半页消息 |
session.half.page.down |
向下滚动半页消息 |
session.first |
跳转到会话中的第一条消息 |
session.last |
跳转到会话中的最后一条消息 |
session.undo |
撤销当前会话中的最后一步 |
session.redo |
重做当前会话中被撤销的操作 |
prompt.submit |
提交 TUI 输入 |
prompt.clear |
清除 TUI 输入 |
agent.cycle |
切换当前选中的代理 |
LSP
[!警告] 此功能目前处于实验阶段!请尝试设置
vim.g.opencode_opts.lsp.enabled = true来体验。
opencode.nvim 提供了一个进程内 LSP,让你可以通过熟悉的 LSP 接口与 opencode 交互!
| LSP 函数 | opencode.nvim 处理程序 |
|---|---|
| Hover | 向 opencode 请求光标下的符号的简要说明 |
| Code Actions | 向 opencode 请求解释或修复光标下的诊断信息 |
👀 事件
opencode.nvim 会将 opencode 的服务器发送事件转发为 OpencodeEvent 自动命令:
-- 处理 `opencode` 事件
vim.api.nvim_create_autocmd("User", {
pattern = "OpencodeEvent:*", -- 可选地过滤事件类型
callback = function(args)
---@type opencode.server.Event
local event = args.data.event
---@type number
local port = args.data.port
-- 查看可用的事件类型及其属性
vim.notify(vim.inspect(event))
-- 执行一些有用的操作
if event.type == "session.idle" then
vim.notify("`opencode` 已完成响应")
end
end,
})
编辑
当 opencode 编辑文件时,opencode.nvim 会自动重新加载对应的缓冲区。
权限
当 opencode 请求权限时,opencode.nvim 会等待空闲状态,然后提示你批准或拒绝该请求。
编辑
对于编辑请求,opencode.nvim 会在新标签页中打开目标文件,并使用 Neovim 的 :diffpatch 功能并排显示建议的更改。可参考 :h 'diffopt' 进行自定义。
| 键位映射 | 功能 |
|---|---|
da |
接受整个编辑请求 |
dr |
拒绝整个编辑请求 |
]c/[c |
切换到下一个/上一个更改 |
dp |
仅接受光标下的变更块,同时拒绝整个编辑请求 |
do |
仅拒绝光标下的变更块,同时拒绝整个编辑请求 |
q |
关闭差异对比窗口 |
状态栏
require("lualine").setup({
sections = {
lualine_z = {
{
require("opencode").statusline,
},
}
}
})
🙏 致谢
- 灵感来源于 nvim-aider、neopencode.nvim 和 sidekick.nvim。
- 为保持简洁,使用了
opencode的 TUI——有关 Neovim 前端,请参阅 sudo-tee/opencode.nvim。 - mcp-neovim-server 可能更适合您,但它缺乏自定义功能,且工具调用速度慢、稳定性不足。
版本历史
v0.7.02026/04/07v0.6.02026/03/29v0.5.22026/03/06v0.5.12026/03/03v0.5.02026/03/02v0.4.02026/02/20v0.3.02026/02/18v0.2.02026/02/10v0.1.02026/02/02常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。