neoai.nvim

GitHub
572 52 简单 2 次阅读 2周前MITAgent语言模型插件
AI 解读 由 AI 自动生成,仅供参考

neoai.nvim 是一款专为 Neovim 用户打造的 AI 辅助插件,将 OpenAI 的 GPT 模型能力直接集成到编辑环境中。许多开发者在使用 AI 时不得不频繁切换浏览器和编辑器,这容易打断编码节奏。neoai.nvim 通过内置的图形界面和多种交互模式,让用户在编写代码的同时就能随时向 AI 提问、生成代码片段或润色文本,无需离开当前工作区。

适合习惯使用 Neovim 进行开发的程序员,尤其是那些追求高效工作流、希望在不中断思路的情况下获得智能提示的开发者。neoai.nvim 的亮点在于支持上下文感知模式,能理解当前代码环境并提供更精准的建议,同时提供专门的快捷键来快速总结文本或生成 Git 提交信息。此外,生成的代码会自动存入寄存器,方便直接粘贴使用。

使用前需配置 OpenAI API Key,并留意账户消费情况。虽然目前处于早期开发阶段,但 neoai.nvim 致力于成为提升编码效率的得力助手,让 AI 真正融入日常开发流程,在保持专注的同时享受智能化带来的便利。

使用场景

后端工程师小李正在紧急修复一个 Python 微服务模块,需要快速重构复杂逻辑并编写规范的 Git 提交记录。

没有 neoai.nvim 时

  • 需要频繁在浏览器聊天窗口和 Neovim 之间切换,复制粘贴代码极易出错。
  • 向 AI 提问时无法直接关联当前光标处的代码,需手动复制大段逻辑描述背景。
  • 编写 Git 提交信息时必须离开编辑器打开记事本或网页,打断了核心编码流程。
  • 每次交互都要重新输入 API Key 或配置,缺乏持久化的便捷体验。
  • 注意力被分散,难以维持深度工作状态,导致修复 Bug 的时间延长。

使用 neoai.nvim 后

  • 通过 :NeoAI 命令直接在编辑器侧边栏唤起对话界面,无需切换任何窗口。
  • 利用 Context 模式自动提取当前选区代码作为上下文,AI 理解更加精准到位。
  • 按下快捷键即可生成符合规范的 Git 消息,结果自动存入寄存器方便粘贴。
  • 所有交互均在终端内完成,配合快捷键映射,极大减少了鼠标操作频率。
  • 保持了完整的编码心流,从问题咨询到代码注入一气呵成,效率显著提升。

neoai.nvim 通过将 AI 助手无缝嵌入 Neovim 工作流,让开发者在不离开键盘的情况下获得智能辅助。

运行环境要求

操作系统
  • 未说明
GPU

无需本地 GPU,依赖 OpenAI 云端 API

内存

未说明

依赖
notes需配置 OPENAI_API_KEY 环境变量;属于 Neovim 插件(基于 Lua),无本地模型推理;需安装 curl 命令;注意 OpenAI API 调用可能产生费用
python无需 Python
nui.nvim
curl
neoai.nvim hero image

快速开始

NeoAI tests

NeoAI

NeoAI 是一个 Neovim 插件,它将 OpenAI 的 GPT-4 的强大功能直接带入你的编辑器。它帮助你生成代码、重写文本,甚至根据上下文获取建议。该插件构建了用户友好的界面,使得与 AI 交互并获得所需帮助变得容易。

注意: 此插件正处于早期变更阶段,并且可能会发生变化。

动机

本插件背后的主要动机是将 AI 聊天助手(如 ChatGPT)无缝集成到你的 Neovim 编码工作流中。目标是创建一个与你和谐工作的工具,让你能够提问并获得帮助,而不会打断你的专注力或编码节奏。与大多数优先考虑娱乐而非生产力的现有插件不同,本插件强调效率和实用性。通过促进流畅且响应迅速的编码体验,旨在提高生产力并使编码更加愉快。

安装

要安装 NeoAI,你可以使用你喜欢的插件管理器。例如,使用 vim-plug,将以下行添加到你的 init.vim.vimrc 中,注意它也需要在系统上安装 nui 依赖和 curl:

Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'

然后运行 :PlugInstall 来安装插件。

对于 lazy.nvim:

return {
    "Bryley/neoai.nvim",
    dependencies = {
        "MunifTanjim/nui.nvim",
    },
    cmd = {
        "NeoAI",
        "NeoAIOpen",
        "NeoAIClose",
        "NeoAIToggle",
        "NeoAIContext",
        "NeoAIContextOpen",
        "NeoAIContextClose",
        "NeoAIInject",
        "NeoAIInjectCode",
        "NeoAIInjectContext",
        "NeoAIInjectContextCode",
    },
    keys = {
        { "<leader>as", desc = "summarize text" },
        { "<leader>ag", desc = "generate git message" },
    },
    config = function()
        require("neoai").setup({
            -- Options go here
        })
    end,
}

对于 packer:

use ({
    "Bryley/neoai.nvim",
    require = { "MunifTanjim/nui.nvim" },
    cmd = {
        "NeoAI",
        "NeoAIOpen",
        "NeoAIClose",
        "NeoAIToggle",
        "NeoAIContext",
        "NeoAIContextOpen",
        "NeoAIContextClose",
        "NeoAIInject",
        "NeoAIInjectCode",
        "NeoAIInjectContext",
        "NeoAIInjectContextCode",
    },
    config = function()
        require("neoai").setup({
            -- Options go here
        })
    end,
})

展示与使用

要使用此插件,请确保你拥有 OpenAI API(应用程序编程接口)密钥,可以在 这里 创建。将此密钥保存到你的环境变量 OPENAI_API_KEY 中。

重要提示:本插件不对意外进行的 OpenAI 购买负责。使用此插件时,我建议你经常检查账户的 使用情况设置限制,以免花费超出承受能力的金额。

本插件引入了 3 种模式或与 AI 模型交互的方式。

普通 GUI 模式

在默认模式下,使用 :NeoAI 命令会在侧边打开一个 GUI(图形用户界面),允许你与模型聊天。此操作类似于在浏览器中使用时的体验,但现在由于 GUI 位于编辑器内而变得更加方便。

Normal Mode GUI

在 Prompt Buffer(提示缓冲区)中,你可以在插入模式下按 Enter 发送文本。此外,可以使用 Control Enter 插入换行符。此映射可以在配置中更改。

另外请注意,该插件有一个功能,即模型的输出会自动保存到 g 寄存器,所有代码片段都会保存到 c 寄存器。这些可以在配置中更改。

上下文模式

上下文模式的工作原理与普通模式类似。但是,你有能力提供关于你想要更改内容的额外信息。例如,如果你正在阅读他人的代码并需要描述其作用,可以通过 visual 模式(可视模式)高亮显示缓冲区中的代码。然后,运行 :NeoAIContext 并在提示缓冲区中输入类似“请为我解释这段代码”的内容。

Context Mode GUI

此外,你可以高亮一些文本并要求“修复这段文本的标点和语法”,以获得更好的文本版本。

请注意,如果在不选择任何内容的情况下运行命令,则整个缓冲区将被传递进去。

注入模式

最后一种模式被称为“注入模式”,通过使用 :NeoAIInject 启用。此模式在没有图形用户界面的情况下运行,允许你快速向模型发送提示,并将生成的输出自动插入到光标下方。所有这些都可以在不打开 GUI 的情况下完成。此外,注入模式内还有一个可以结合上下文执行的子模式。

Inject Mode

快捷键

本插件的一个功能是创建快捷键,如下所述。该插件包含两个内置快捷键;第一个重新格式化选定的文本以提高可读性,默认键位绑定为 <leader>as(A 代表 AI,S 代表总结)。

Summarize Shortcut

另一个内置快捷键是为你自动生成 git 提交信息:

Git Commit Message

警告:请注意,过度使用此功能可能会导致发送给模型的数据积累,从而导致高昂的费用。为了避免这种情况,建议进行较小的提交或较少频率地使用此功能。跟踪使用情况至关重要,可以通过 此链接 进行监控。

设置

要设置此插件,请将以下代码(使用默认值)添加到你的 init.lua 文件中(如果使用 lazy.nvim 或 packer.nvim,请将其放入 config 选项下)。

require("neoai").setup({
    -- Below are the default options, feel free to override what you would like changed
    ui = {
        output_popup_text = "NeoAI",
        input_popup_text = "Prompt",
        width = 30, -- As percentage eg. 30%
        output_popup_height = 80, -- As percentage eg. 80%
        submit = "<Enter>", -- Key binding to submit the prompt
    },
    models = {
        {
            name = "openai",
            model = "gpt-3.5-turbo",
            params = nil,
        },
    },
    register_output = {
        ["g"] = function(output)
            return output
        end,
        ["c"] = require("neoai.utils").extract_code_snippets,
    },
    inject = {
        cutoff_width = 75,
    },
    prompts = {
        context_prompt = function(context)
            return "Hey, I'd like to provide some context for future "
                .. "messages. Here is the code/text that I want to refer "
                .. "to in our upcoming conversations:\n\n"
                .. context
        end,
    },
    mappings = {
        ["select_up"] = "<C-k>",
        ["select_down"] = "<C-j>",
    },
    open_ai = {
        api_key = {
            env = "OPENAI_API_KEY",
            value = nil,
            -- `get` is is a function that retrieves an API key, can be used to override the default method.
            -- get = function() ... end

            -- Here is some code for a function that retrieves an API key. You can use it with
            -- the Linux 'pass' application.
            -- get = function()
            --     local key = vim.fn.system("pass show openai/mytestkey")
            --     key = string.gsub(key, "\n", "")
            --     return key
            -- end,
        },
    },
    shortcuts = {
        {
            name = "textify",
            key = "<leader>as",
            desc = "fix text with AI",
            use_context = true,
            prompt = [[
                Please rewrite the text to make it more readable, clear,
                concise, and fix any grammatical, punctuation, or spelling
                errors
            ]],
            modes = { "v" },
            strip_function = nil,
        },
        {
            name = "gitcommit",
            key = "<leader>ag",
            desc = "generate git commit message",
            use_context = false,
            prompt = function()
                return [[
                    Using the following git diff generate a consise and
                    clear git commit message, with a short title summary
                    that is 75 characters or less:
                ]] .. vim.fn.system("git diff --cached")
            end,
            modes = { "n" },
            strip_function = nil,
        },
    },
})

选项

设置函数接受一个包含选项的表 (table) 来配置插件。可用选项如下:

UI (用户界面) 选项

  • output_popup_text: 输出弹窗窗口上显示的标题文本(默认:"NeoAI")。
  • input_popup_text: 输入弹窗窗口上显示的标题文本(默认:"Prompt")。
  • width: 窗口宽度的百分比(例如,30 = 30%,默认:30)。
  • output_popup_height: 输出弹窗高度的百分比(例如,80 = 80%,默认:80)。
  • submit: 提交提示词的按键绑定。如果设置为 将被映射为插入新行。(默认:"")。

模型选项

  • models: 要使用的模型列表:
    • name: 模型提供商的名称(例如:"openai")
    • model: 要使用的模型名称字符串或模型名称列表
    • params: 传递给模型的参数表(例如 temperature, top_p)

寄存器输出

  • register_output: 一个以寄存器为键的表,以及一个接受 AI 原始输出并决定保存到该寄存器的内容的函数。示例:
register_output = {
    ["g"] = function(output)
        return output
    end,
    ["c"] = require("neoai.utils").extract_code_snippets,
}

注入选项

  • cutoff_width: 当注入时,如果文本长度超过此值,应换行。如果设置为 nil,则忽略长度(默认:75)。

提示词选项

  • context_prompt: 一个生成用于上下文模式 (Context modes) 的提示词的函数。示例:
context_prompt = function(context)
    return "Hi ChatGPT, I'd like to provide some context for future "
        .. "messages. Here is the code/text that I want to refer "
        .. "to in our upcoming conversations:\n\n"
        .. context
end

OpenAI 选项:

  • open_api_key_env (已弃用,请使用 api_key.env 代替): 包含 OpenAI API 密钥的环境变量。默认值为 "OPENAI_API_KEY "。
  • api_key.env: 包含 OpenAI API 密钥的环境变量。默认值为 "OPENAI_API_KEY"。
  • api_key.value: OpenAI API 密钥,其优先级高于 api_key .env
  • api_key.get: 用于检索 OpenAI API 密钥的函数。有关实现示例,请参阅 设置 部分。它具有更高的优先级。

映射

  • mappings: 包含以下操作的表,这些操作可以作为键:

    • select_up: 在输入窗口中选择输出窗口
    • select_down: 在输出窗口中选择输入窗口

值是这些操作的按键绑定,如果没有操作则为 nil

快捷方式选项

  • shortcuts: 快捷方式数组。每个快捷方式是一个包含以下内容的表:
  • name: 字符串。快捷方式的名称,可以使用 :NeoAIShortcut 触发
  • key: 监听的键绑定值,如果快捷方式没有键绑定则为 nil。
  • desc 字符串或 nil。按键绑定的描述(如果有)
  • use_context: 是否应使用选中/缓冲区的上下文。
  • prompt: 要发送的提示词或生成要发送的提示词的函数。
  • modes: 设置按键绑定的模式列表,"n" 代表正常模式,"v" 代表可视模式。
  • strip_function: 要使用的剥离函数(可选)。

用户命令

:NeoAI [prompt]

智能切换 NeoAI 窗口。如果窗口已关闭,它将打开并发送可选的 [prompt]。如果窗口已打开且聚焦,它将关闭。最后,如果窗口已打开但未聚焦,它将聚焦窗口并发送可选的 [prompt]。

:NeoAIToggle [prompt]

切换 NeoAI 窗口。如果窗口已关闭,它将打开并发送可选的 [prompt]。如果窗口已打开,它将关闭。

:NeoAIOpen [prompt]

打开 NeoAI 窗口并发送可选的 [prompt]。

:NeoAIClose

关闭 NeoAI 窗口。

:NeoAIContext [prompt]

智能地根据上下文 (context) 切换 NeoAI 窗口。如果窗口关闭,它将打开并发送可选的 [prompt]。如果窗口已打开且聚焦,它将关闭;最后,如果窗口已打开但未聚焦,它将聚焦该窗口并发送可选的 [prompt]。此命令使用的上下文 (context) 是可视模式下选中的文本 (visual mode),如果没有进行选择,则为整个缓冲区 (buffer)。

:NeoAIContextOpen [prompt]

打开带有上下文 (context) 的 NeoAI 窗口并发送可选的 [prompt]。此命令使用的上下文 (context) 是可视模式下选中的文本 (visual mode),如果没有进行选择,则为整个缓冲区 (buffer)。

:NeoAIContextClose

关闭带有上下文 (context) 的 NeoAI 窗口。

:NeoAIInject [prompt]

将 [prompt] 发送给 AI,并直接将 AI 响应注入到缓冲区 (buffer) 中,无需打开 NeoAI 窗口。

:NeoAIInjectCode [prompt]

将 [prompt] 发送给 AI,并直接将 AI 响应注入到缓冲区 (buffer) 中,无需打开 NeoAI 窗口。响应将被剥离所有非代码片段的内容。

:NeoAIInjectContext [prompt]

将 [prompt] 与上下文 (context) 一起发送给 AI,并直接将 AI 响应注入到缓冲区 (buffer) 中,无需打开 NeoAI 窗口。此命令使用的上下文 (context) 是可视模式下选中的文本 (visual mode),如果没有进行选择,则为整个缓冲区 (buffer)。

:NeoAIInjectContextCode [prompt]

将 [prompt] 与上下文 (context) 一起发送给 AI,并直接将 AI 响应注入到缓冲区 (buffer) 中,无需打开 NeoAI 窗口。响应将被剥离所有非代码片段的内容。此命令使用的上下文 (context) 是可视模式下选中的文本 (visual mode),如果没有进行选择,则为整个缓冲区 (buffer)。

:NeoAIShortcut <shortcut>

触发在配置中通过其名称创建的 NeoAI 快捷方式,而不是通过键绑定 (keybinding)。

Roadmap:

  • 问题 1
    • 为快捷方式添加描述选项
    • 能够通过用户命令运行快捷方式
  • 测试 (已开始)
  • 多个聊天会话
  • Telescope 集成
  • 切换模型
  • 更好的颜色(例如高亮用户输入)
  • 在 NeoAIContext 缓冲区内部时高亮上下文,或使上下文清晰可见
  • 用于用新生成的代码替换上下文的键映射
  • 支持:
    • Amazon CodeWhisperer
    • Github Copilot
  • 更好的错误检测
  • 来回对话
  • 使用可视模式 (visual mode) 的上下文
  • 修复在 NeoAI 图形用户界面 (GUI) 上使用 :q 的问题
  • 配置
  • 为上下文相关问题添加自定义键绑定
  • 合并注入操作的撤销
  • 修复注入标记有时未设置注入模式的问题。
  • 注入时剥离输出以获取代码或其他内容。
    • 确保也匹配文件末尾并用于注入模式
  • 使用缓冲区的上下文
  • 从输出中剥离代码并放入缓冲区
  • 添加设置配置
  • 更好地聚焦图形用户界面 (GUI) 窗口的方法

License

采用 MIT 许可证授权。有关详细信息,请查看 LICENSE 文件。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

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 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

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 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架