gp.nvim
将 GPT/Claude 等 AI 能力无缝嵌入 Neovim,实现编辑器内对话、代码修改和语音指令
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将 GPT/Claude 等 AI 能力无缝嵌入 Neovim,实现编辑器内对话、代码修改和语音指令
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你正在 Neovim 中编写一段复杂的递归算法,写到一半突然卡壳——不是语法不会,而是逻辑思路断了。传统做法是切换到浏览器,打开 ChatGPT,把代码复制粘贴过去,再把答案抄回来。一来一回,思路早就散了。
Gp.nvim 解决的就是这个问题:它把 GPT 类 AI 能力直接嵌入 Neovim 编辑器内部,让 AI 成为你工作流的原生组成部分,而不是一个需要跳转切换的外挂。
这个插件由独立开发者 Robitx 创建(2023年6月首个 commit),至今已收获 1316 颗 GitHub Stars,127 次 Fork,在 Neovim 生态的 AI 增强类插件中属于头部项目。项目采用 MIT 许可证,代码完全开源。
Gp.nvim 的设计哲学很有意思——它不追求做一个"全能 AI 助手",而是追求"最小侵入性"。作者在 README 中写道:"Try to keep things as native as possible",意思是尽量复用 Neovim 原生的交互模式,不另起炉灶。
这种理念体现在多个层面:
u 撤销整段回答,也可以中途按 Ctrl+C 中断生成。这完全模拟了终端命令的交互逻辑。~/.local/state/gp/chats/ 目录下,用普通文本编辑器的方式管理对话历史。neovim + curl + grep,极度轻量。这意味着它几乎不会与其他插件产生兼容性问题。这是 Gp.nvim 最核心的功能。创建新会话后,AI 响应显示在一个专门 buffer 中,支持 Markdown 渲染,代码块带语法高亮。你可以:
:GpChatNew 创建新会话:GpChatToggle 打开/关闭最近会话的弹出窗口:GpChatFinder 打开会话管理器,搜索、预览、删除、打开任意历史会话会话内容以 Markdown 格式存储在本地,这意味着你完全掌控自己的数据——没有第三方服务器,没有云端同步。
这是比简单聊天更强大的功能。你可以选中一段代码或文本,然后下达自然语言指令,让 AI 直接修改选中内容:
:GpRewrite — 重写选中内容:GpExtend — 扩展/续写选中内容:GpShorten — 精简选中内容:Gpify — 将选中内容转换为另一个风格(如将注释转为代码):GpFixGrammar — 修正语法错误每个命令都对应一个快捷键映射,选中文本后一键触发,AI 直接原地修改,不需要跳转到其他地方。
Gp.nvim 内置了语音输入支持,依赖 sox 工具。配置麦克风后,说出你的需求,AI 直接接收语音指令。这个功能对于双手不便操作键盘的场景(如双手在键盘上编码时)特别有用。
支持 DALL-E 等图像生成模型。你可以在对话中描述想要的图片,AI 生成后直接插入到 Neovim 的 buffer 中。这个功能主要用于 AI 辅助设计、图标生成等创意场景。
Gp.nvim 支持多种 LLM Provider,这是一个重要的差异化优势:
| Provider | 说明 |
|---|---|
| OpenAI | GPT-4o、GPT-4 Turbo、GPT-3.5 Turbo 等 |
| Anthropic | Claude 3.5 Sonnet、Claude 3 Opus |
| Ollama | 本地运行 Llama 3、Mistral 等开源模型 |
| Gemini 系列 | |
| Groq | 低延迟推理 |
| OpenRouter | 聚合多个模型的统一接口 |
对于有隐私顾虑的用户,Ollama 支持最为关键——你可以在本地机器上运行开源模型(如 Llama 3、Mistral),完全不依赖任何外部 API,数据完全本地处理。
配置多 Provider 也很简单,只需在 setup() 中指定各 Provider 的 API Endpoint 和 API Key,Gp.nvim 支持在会话级别切换不同模型。
从 v3.x 开始,Gp.nvim 引入了 Agent 模式。不同于单轮对话,Agent 可以自主规划多步行动:它会分析任务、调用工具(如搜索代码、执行命令)、根据结果迭代优化,直到完成任务。这使得它可以处理更复杂的开发任务,而不仅仅是回答问题。
Gp.nvim 采用模块化 Lua 插件架构,核心模块包括:
init.lua — 插件入口,定义公开 APIdispatcher.lua(16KB)— 命令分发核心,处理各类 :GpXxx 命令路由tasker.lua(6KB)— 异步任务管理,处理流式响应的并发控制render.lua(6KB)— 内容渲染,将 AI 响应渲染为带高亮的 bufferwhisper.lua(9KB)— 语音识别封装,调用本地语音转文字服务vault.lua — 会话存储管理config.lua — 配置解析和合并逻辑health.lua — Neovim 内置健康检查集成项目使用 Neovim 原生的 Lua API(vim.api、vim.fn、vim.env),完全不使用外部 Lua 库,代码风格符合 lua-style-guide 规范,使用 ---@param 和 ---@return 进行类型标注。
配置系统通过 Hook 函数支持无限扩展——用户可以在 setup() 中传入自定义函数,这些函数会被自动注册为新的命令,从而在不修改源码的情况下添加新功能。
Gp.nvim 支持所有主流 Neovim 插件管理器:
-- lazy.nvim
{ "Robitx/gp.nvim" }
-- 然后在 init.lua 中配置
require("gp").setup({
-- OpenAI API 配置
openai = { api_key = os.getenv("OPENAI_API_KEY") },
-- Anthropic 配置
anthropic = { api_key = os.getenv("ANTHROPIC_API_KEY") },
-- Ollama 本地模型(隐私友好)
ollama = { endpoint = "http://localhost:11434", model = "llama3" },
})
最低要求:Neovim 0.9+。可选依赖:curl(必须)、sox(语音功能)。
Gp.nvim 代表了一种"编辑器内 AI"的轻量化实现路径:不做 IDE 插件、不依赖 Electron、不搞 Electron 式的重型 UI,就用 Neovim 原生的 Buffer + Markdown 做渲染,用 Lua 做逻辑,用 curl 调用外部 API——极简、极轻、极稳。
它的出现背景也很有意思:2023 年正值大模型 API 能力爆发,开发者们开始在各种工具中集成 AI,但大多数方案都选择"从零构建一个 AI 应用"。Gp.nvim 反其道而行,选择"把 AI 嵌入已有的工作流",这个思路对其他工具类插件有重要的借鉴意义。
对于已经习惯 Neovim 的开发者,Gp.nvim 是目前将 AI 能力引入编辑器最自然、成本最低的方案之一。