ChatGPT.nvim
ChatGPT.nvim 是一款专为 Neovim 编辑器设计的插件,旨在让开发者能够直接在代码编辑环境中无缝调用 OpenAI 的 ChatGPT API。它打破了传统编程中需要在编辑器与浏览器之间频繁切换的壁垒,将强大的自然语言处理能力深度集成到工作流中,从而显著提升编码效率与体验。
这款插件主要解决了开发者在编写代码时面临的上下文断裂问题。无论是需要快速生成代码片段、进行智能补全,还是希望获得针对特定编程任务的交互式指导,ChatGPT.nvim 都能提供即时响应。它不仅支持类似 GitHub Copilot 的代码自动补全,还内置了丰富的预设动作,如语法纠错、代码解释、添加测试用例、生成文档字符串以及 Bug 修复等,极大地简化了日常开发中的繁琐任务。
ChatGPT.nvim 特别适合追求高效工作流的软件工程师、全栈开发者以及重度 Neovim 用户。对于希望在不离开编辑器的情况下获得 AI 辅助编程支持的专业人士而言,它是一个极具价值的利器。
在技术亮点方面,ChatGPT.nvim 提供了高度定制化的交互体验。它支持基于不同“人设”的对话模式,允许用户通过加载 Awesome ChatGPT Prompts 来探索多样化的视角。此外,插件具备强大的上下文引用功能,用户可以在提示词中使用 @ 符号直接引用 LSP 定义或项目文件内容,确保 AI 回答的准确性。其渲染引擎也经过优化,支持 Markdown 格式、代码高亮及差异对比显示,使得对话界面清晰易读。同时,它还兼容 Azure 部署及自定义 API 主机,满足了企业级用户的安全与隐私需求。
使用场景
资深后端工程师李明正在 Neovim 中重构一个遗留的 Python 微服务模块,该模块逻辑复杂且缺乏文档,他需要在不离开编辑器的情况下快速理解代码并补充单元测试。
没有 ChatGPT.nvim 时
- 上下文切换频繁:为了理解晦涩的函数逻辑,李明必须复制代码片段,切换到浏览器打开 ChatGPT 网页版,粘贴后再切回编辑器,严重打断心流。
- 文档编写枯燥:手动为每个函数编写符合规范的 Docstring 耗时费力,容易遗漏参数说明或返回值类型,导致后续维护困难。
- 测试覆盖不足:由于编写单元测试样板代码繁琐,李明往往只覆盖核心路径,忽略了边界条件和异常处理,埋下潜在 Bug。
- 代码解释滞后:面对复杂的正则表达式或算法逻辑,缺乏即时解释工具,只能依靠个人经验猜测,调试效率低下。
使用 ChatGPT.nvim 后
- 无缝交互体验:李明直接在 Neovim 中选中代码块,通过快捷键唤起 ChatGPT.nvim 进行问答,无需离开编辑器即可获取代码解释和优化建议,保持专注。
- 自动化文档生成:利用内置的“生成 Docstring”动作,一键为选定函数生成标准化的文档注释,准确包含参数和返回值信息,大幅提升代码可读性。
- 智能测试辅助:通过“添加测试”功能,自动基于当前代码逻辑生成涵盖正常流程和边界情况的 pytest 用例,显著提高了测试覆盖率。
- 即时代码洞察:遇到难懂的代码段时,使用“解释代码”功能,AI 立即在侧边栏提供清晰的自然语言解析,甚至能指出潜在的逻辑漏洞。
ChatGPT.nvim 通过将 AI 能力深度集成到 Neovim 工作流中,消除了上下文切换的成本,让开发者能够以更低的认知负荷完成代码理解、文档化和测试等高价值任务。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
ChatGPT.nvim
ChatGPT 是一款 Neovim 插件,使您能够轻松地使用 OpenAI 的 ChatGPT API,在编辑器中直接根据您的问题生成自然语言回复。

功能
交互式问答:通过直观的界面与强大的 gpt 模型(ChatGPT)进行交互式问答。
基于角色的对话:从 Awesome ChatGPT 提示词库中选择提示,探索不同视角并与各种角色展开对话。
代码编辑辅助:借助 gpt 模型提供的交互式编辑窗口,获得针对编码任务的指导,提升编码体验。
代码补全:享受类似 GitHub Copilot 的便捷代码补全功能,利用 gpt 模型根据上下文和编程模式推荐代码片段和补全内容。
可自定义操作:使用 gpt 模型执行多种操作,如语法纠正、翻译、关键词生成、文档字符串创建、添加测试、代码优化、摘要生成、错误修复、代码解释、Roxygen 编辑以及代码可读性分析。此外,您还可以通过 JSON 文件定义自己的自定义操作。
丰富的消息渲染:增强聊天显示效果,支持带样式的代码块(语言标头、复制指示器、可折叠)、Markdown 格式化(标题、加粗、斜体、列表、引用、链接)、差异高亮以及发送者标识。
内联上下文引用:使用
@符号,将 LSP 定义或项目文件中的上下文直接插入到您的提示中。引用会以内联形式显示,并在发送至 API 时展开。
如需全面了解该插件的功能,您可以观看插件演示 视频。
安装
OpenAI API 密钥可以通过以下两种方式提供:
在配置选项
api_key_cmd中,提供一个返回 API 密钥到标准输出的可执行文件路径及其参数。通过名为
$OPENAI_API_KEY的环境变量设置。
使用配置选项 api_host_cmd 或名为 $OPENAI_API_HOST 的环境变量,可以指定自定义的 OpenAI API 主机。如果您无法直接访问 OpenAI,这将非常有用。
可通过配置选项 extra_curl_params 传递自定义的 cURL 参数。如果需要为请求添加额外的头部信息,这将非常实用:
{
...,
extra_curl_params = {
"-H",
"Origin: https://example.com"
}
}
对于 Azure 部署,您需要指定 URL 基础、引擎和 API 类型。可以通过以下两种方式实现:
- 使用配置选项
api_type_cmd、azure_api_base、azure_api_engine_cmd和azure_api_version_cmd。每个选项都应是一个返回相应值的可执行命令。
例如:
local config = {
api_host_cmd = 'echo -n ""',
api_key_cmd = 'pass azure-openai-key',
api_type_cmd = 'echo azure',
azure_api_base_cmd = 'echo https://{your-resource-name}.openai.azure.com',
azure_api_engine_cmd = 'echo chat',
azure_api_version_cmd = 'echo 2023-05-15'
}
require("chatgpt").setup(config)
- 通过环境变量
$OPENAI_API_TYPE、$OPENAI_API_BASE、$OPENAI_API_AZURE_ENGINE和$OPENAI_API_AZURE_VERSION设置这些值。
例如:
export OPENAI_API_TYPE="azure"
export OPENAI_API_BASE="https://{your-resource-name}.openai.azure.com"
export OPENAI_API_AZURE_ENGINE="chat"
export OPENAI_API_AZURE_VERSION="2023-05-15"
请注意,编辑模型已被弃用,可能无法按预期工作。
如果您使用 packer.nvim 作为插件管理器:
-- Packer
use({
"jackMort/ChatGPT.nvim",
config = function()
require("chatgpt").setup()
end,
requires = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"folke/trouble.nvim",
"nvim-telescope/telescope.nvim"
}
})
或者如果您使用 lazy.nvim:
-- Lazy
{
"jackMort/ChatGPT.nvim",
event = "VeryLazy",
config = function()
require("chatgpt").setup()
end,
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"folke/trouble.nvim", -- 可选
"nvim-telescope/telescope.nvim"
}
}
配置
ChatGPT.nvim 具有以下默认配置,您可以通过在 setup 参数中传入配置来覆盖它们:
https://github.com/jackMort/ChatGPT.nvim/blob/main/lua/chatgpt/config.lua
示例配置
聊天模型的简单配置可能如下所示:
{
"jackMort/ChatGPT.nvim",
event = "VeryLazy",
config = function()
require("chatgpt").setup({
-- 此配置假设您已设置 OPENAI_API_KEY 环境变量
openai_params = {
-- 注意:模型可以是一个返回模型名称的函数
-- 这在您希望使用命令动态切换模型时非常有用
-- 例如:
-- model = function()
-- if some_condition() then
-- return "gpt-5"
-- else
-- return "gpt-5-mini"
-- end
-- end,
model = "gpt-5-mini",
frequency_penalty = 0,
presence_penalty = 0,
max_tokens = 4095,
temperature = 0.2,
top_p = 0.1,
n = 1,
}
})
end,
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"folke/trouble.nvim", -- 可选
"nvim-telescope/telescope.nvim"
}
}
密钥管理
通过环境变量提供 OpenAI API 密钥是不安全的,因为这会使该密钥容易被任何能够访问其他进程环境变量的进程读取。此外,这种方式还会促使用户将凭据以明文形式存储在配置文件中。
作为替代方案,建议用户不要通过 OPENAI_API_KEY 环境变量来提供 API 密钥,而是使用 api_key_cmd 配置选项。api_key_cmd 配置选项接受一个字符串,该字符串会在启动时执行,并将执行结果用作 API 密钥。
以下配置将使用 1Password 的命令行工具 op,从 OpenAI 条目的 credential 字段中获取 API 密钥:
require("chatgpt").setup({
api_key_cmd = "op read op://private/OpenAI/credential --no-newline"
})
以下配置则会使用 GPG 解密本地包含 API 密钥的文件:
local home = vim.fn.expand("$HOME")
require("chatgpt").setup({
api_key_cmd = "gpg --decrypt " .. home .. "/secret.txt.gpg"
})
请注意,api_key_cmd 的参数会按空格进行分割。如果需要在参数中包含空格(例如引用带有空格的路径),可以将其封装在一个单独的脚本中。
使用方法
该插件提供了以下命令:
ChatGPT
ChatGPT 命令会打开一个使用 gpt-5-mini 模型的交互式窗口。
(也称为 ChatGPT)
ChatGPTActAs
ChatGPTActAs 命令会打开一个提示选择界面,来自 Awesome ChatGPT Prompts,用于与 gpt-5-mini 模型一起使用。

ChatGPTEditWithInstructions
ChatGPTEditWithInstructions 命令会打开一个交互式窗口,允许使用 gpt-5-mini 模型(可配置)编辑选定的文本或整个窗口。
你可以通过 Lua API 将其映射到键位上,例如使用 which-key.nvim:
local chatgpt = require("chatgpt")
wk.register({
p = {
name = "ChatGPT",
e = {
function()
chatgpt.edit_with_instructions()
end,
"使用指令编辑",
},
},
}, {
prefix = "<leader>",
mode = "v",
})
- 演示视频。

ChatGPTRun
ChatGPTRun [action] 命令会运行特定的操作——详细列表请参阅 actions.json 文件。可用的操作包括:
grammar_correction:语法修正translate:翻译keywords:提取关键词docstring:生成文档字符串add_tests:添加测试代码optimize_code:优化代码summarize:摘要fix_bugs:修复错误explain_code:解释代码roxygen_edit:Roxygen 注释编辑code_readability_analysis:代码可读性分析——参见 演示fix_diagnostic:修复光标下的错误explain_diagnostic:解释光标下的错误fix_diagnostics:修复选区内的所有错误
以上所有操作均使用 gpt-5-mini 模型。
也可以通过 JSON 文件定义自定义操作。示例请参阅 actions.json。自定义操作的路径可以在配置中设置(参见上述配置示例中的 actions_paths 字段)。
自定义操作的示例如下:(# 表示注释)
{
"action_name": {
"type": "chat", # 或 "completion" 或 "edit"
"opts": {
"template": "使用可能变量的模板",
"strategy": "replace", # 或 "display" 或 "append" 或 "edit"
"params": { # 根据官方 OpenAI API 的参数
"model": "gpt-5-mini", # 或 OpenAI API 中“type”支持的任何其他模型,可参考 Playground
"stop": [
"```" # 用于停止模型的字符串
]
}
},
"args": {
"argument": {
"type": "strig",
"optional": "true",
"default": "某个值"
}
}
}
}
可用的模板变量:
{{input}}:选定的文本{{filetype}}:Neovim 文件类型{{filepath}}:文件的相对路径{{argument}}:命令行中提供的参数{{diagnostic}}:光标下的 LSP 诊断信息(格式:[严重性] 消息(第 N 行)){{diagnostics}}:选区内的所有 LSP 诊断信息(格式:第 N 行 [严重性]:消息)
“edit”策略会将输出与输入并排显示,并允许进一步编辑。
目前,“edit”策略仅适用于“chat”类型。
“display”策略会在浮动窗口中显示输出。
“append”和“replace”则会直接修改缓冲区中的文本。
交互式弹出窗口
在使用 ChatGPT 和 ChatGPTEditWithInstructions 时,以下快捷键可用:
提交与关闭:
<C-Enter>/<Enter>提交提示q关闭聊天窗口<C-c>停止生成回复
导航:
]m/[m切换到下一条/上一条消息]c/[c切换到下一个/上一个代码块<C-u>/<C-d>上下滚动聊天窗口<Tab>在窗口之间循环切换
切换项(前缀为 g):
gs切换设置面板(只读)gh切换帮助面板gp切换会话面板gr切换系统角色窗口gm切换消息角色(用户/助手)gl循环切换布局模式(居中/右侧)gn开始新会话gd草稿消息(添加但不发送)
操作:
y复制光标处的代码块Y复制最后的回答内容d删除选定的消息e编辑选定的消息r重命名会话(在会话面板中)za切换代码块的折叠状态@触发上下文自动补全(LSP、项目、文件、Git 差异)
编辑窗口专用:
<C-y>接受更改<C-d>切换差异视图<C-i>将回复用作输入
设置窗口(gs)会显示当前配置(模型、温度、最大令牌数、会话名称)。如需更改设置,请修改你的 setup() 配置。
Whichkey 插件映射
将这些添加到你的 whichkey 插件中,以获得便捷的键绑定。
c = {
name = "ChatGPT",
c = { "<cmd>ChatGPT<CR>", "ChatGPT" },
e = { "<cmd>ChatGPTEditWithInstruction<CR>", "使用指令编辑", mode = { "n", "v" } },
g = { "<cmd>ChatGPTRun grammar_correction<CR>", "语法修正", mode = { "n", "v" } },
t = { "<cmd>ChatGPTRun translate<CR>", "翻译", mode = { "n", "v" } },
k = { "<cmd>ChatGPTRun keywords<CR>", "关键词提取", mode = { "n", "v" } },
d = { "<cmd>ChatGPTRun docstring<CR>", "生成文档字符串", mode = { "n", "v" } },
a = { "<cmd>ChatGPTRun add_tests<CR>", "添加测试用例", mode = { "n", "v" } },
o = { "<cmd>ChatGPTRun optimize_code<CR>", "代码优化", mode = { "n", "v" } },
s = { "<cmd>ChatGPTRun summarize<CR>", "摘要生成", mode = { "n", "v" } },
f = { "<cmd>ChatGPTRun fix_bugs<CR>", "修复 bug", mode = { "n", "v" } },
x = { "<cmd>ChatGPTRun explain_code<CR>", "解释代码", mode = { "n", "v" } },
r = { "<cmd>ChatGPTRun roxygen_edit<CR>", "Roxygen 编辑", mode = { "n", "v" } },
l = { "<cmd>ChatGPTRun code_readability_analysis<CR>", "代码可读性分析", mode = { "n", "v" } },
},
版本历史
v0.1.1-alpha2023/01/08v0.1.0-alpha2022/12/30常见问题
相似工具推荐
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 真正成长为懂上
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
OpenHands
OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。
