Gemini Neovim集成插件

为Gemini CLI提供Neovim支持,包括内置差异查看器和钩子支持,实现Gemini与Neovim的无缝通信。

  • by zaucy
  • Lua
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 zaucy/gemini.nvim

使用说明

双子座

Neovim支持Gemini CLI,具有内置的diff查看器和挂钩支持。这个插件实际上并没有生成Gemini;它只是设置环境变量和工作区设置,这样当你运行Gemini时,它就可以与Neovim通信。

请注意,您应该使用 zaucy/mcp.nvim 登记工具和提示;这个插件专门关注Gemini IDE集成和监听钩子。

安装

lazy.nvim

{
    "zaucy/gemini.nvim",
    dependencies = {
        "zaucy/mcp.nvim",
    },
    opts = {},
}

自动命令

此插件公开了几个用户自动命令,您可以使用这些命令在Gemini交互的各个阶段触发操作。

模式 描述 数据
GeminiHookSessionStart 当新的Gemini会话开始时触发。 context
GeminiHookBeforeAgent 在代理开始处理之前触发。 context
GeminiHookBeforeToolSelection 在模型选择工具之前触发。 context
GeminiHookBeforeTool 在执行工具之前触发。 context
GeminiHookAfterTool 在执行工具后触发。 context
GeminiHookAfterModel 在模型完成响应后触发。 context
GeminiHookSessionEnd 双子座会话结束时触发。 context
GeminiOpenDiffPre 在打开差异视图之前触发。 -
GeminiOpenDiff 打开差异视图后触发。 bufnr
GeminiCloseDiff 在关闭差异视图后触发。 bufnr

示例用法

vim.api.nvim_create_autocmd("User", {
    pattern = "GeminiHookAfterTool",
    callback = function(args)
        local context = args.data.context
        -- Example: Print tool name if available in context
        if context.tool_name then
            print("Tool executed: " .. context.tool_name)
        end
    end,
})

实施策略

gemini.nvim 与紧密结合 mcp.nvim 为Gemini CLI提供无缝环境。

实施依赖于几个关键机制:

  1. 事件驱动配置: 插件监听 McpServerCreated 和 McpServerDirChange 来自的自动命令 mcp.nvim当这些事件发生时, gemini.nvim 动态生成当前工作区的设置。
  2. 环境变量: 在启用MCP的项目中发生目录更改时,插件会更新特定的环境变量:
    • GEMINI_CLI_IDE_WORKSPACE_PATH:当前项目根目录。
    • GEMINI_CLI_SYSTEM_SETTINGS_PATH:特定于工作区的路径 settings.json 插件生成的文件。
    • GEMINI_CLI_IDE_SERVER_STDIO_COMMAND & GEMINI_CLI_IDE_SERVER_STDIO_ARGS:将Gemini配置为使用专门的客户端脚本作为MCP服务器与Neovim进行通信。
  3. 动态设置生成: 插件生成一个 settings.json 文件:
    • 将Neovim配置为Gemini的MCP服务器,使其能够调用以下工具 openDiff 和 closeDiff.
    • 设置“钩子”,通知Neovim会话事件(例如。, BeforeTool, AfterModel).
  4. 吊钩系统: 当Gemini执行钩子时,它会调用此插件提供的钩子脚本,该脚本进而通过RPC与Neovim通信以触发 User 自动命令,允许可扩展的行为。

其他插件

  • https://github.com/vaijab/gemini-cli.nvim-此插件的原始灵感