Skip to content

GeorgesAlkhouri/nvim-aider

Repository files navigation

aider nvim-aider

🤖 Seamlessly integrate Aider with Neovim for an enhanced AI-assisted coding experience!

screenshot_1 screenshot_2

🚧 This plugin is in initial development. Expect breaking changes and rough edges. October 17, 2024

🌟 Features

  • 🖥️ Aider terminal integration within Neovim
  • 🎨 Color theme configuration support with auto Catppuccin flavor synchronization if available
  • 📤 Quick commands to add/drop current buffer files
  • 📤 Send buffers or selections to Aider
  • ♻️ Reset command to clear session
  • 💬 Optional user prompt for buffer and selection sends
  • 🩺 Send current buffer diagnostics to Aider
  • 🔍 Aider command selection UI with fuzzy search and input prompt
  • 🔌 Fully documented Lua API for programmatic interaction and custom integrations
  • 🔄 Auto-reload buffers on external changes (requires 'autoread')

🧩 Integrations

  • 🌲➕ Neo-tree offers rich context management for Aider, including files, directories, and multi-selection
  • 🔖 bookmarks.nvim enables adding (optionally as read-only) or dropping files from Aider using saved bookmarks
  • 🌳 nvim-tree.lua enables adding or dropping individual files to Aider directly from its tree interface

🎮 Commands

  • :Aider - Open interactive command menu

    Commands:
    health         🩺 Check plugin health status
    toggle         🎛️ Toggle Aider terminal window
    send           📤 Send text to Aider (prompt if empty)
    command        ⌨️ Show slash commands
    buffer         📄 Send current buffer
     > diagnostics 🩺 Send current buffer diagnostics
    add            ➕ Add file to session
     > readonly    👀 Add as read-only reference
    drop           🗑️ Remove file from session
    reset          ♻️ Drop all files and clear chat history
    
  • ⚡ Direct command execution examples:

    :Aider health
    :Aider add readonly
    :Aider send "Fix login validation"
    :Aider reset

🔗 Requirements

🐍 Python: Install aider-chat 📋 System: Neovim >= 0.9.4, Working clipboard thanks to @milanglacier 🌙 Lua: folke/snacks.nvim, optionals catppuccin/nvim, nvim-neo-tree/neo-tree.nvim, nvim-tree.lua

📦 Installation

Using lazy.nvim:

{
    "GeorgesAlkhouri/nvim-aider",
    cmd = "Aider",
    -- Example key mappings for common actions:
    keys = {
      { "<leader>a/", "<cmd>Aider toggle<cr>", desc = "Toggle Aider" },
      { "<leader>as", "<cmd>Aider send<cr>", desc = "Send to Aider", mode = { "n", "v" } },
      { "<leader>ac", "<cmd>Aider command<cr>", desc = "Aider Commands" },
      { "<leader>ab", "<cmd>Aider buffer<cr>", desc = "Send Buffer" },
      { "<leader>a+", "<cmd>Aider add<cr>", desc = "Add File" },
      { "<leader>a-", "<cmd>Aider drop<cr>", desc = "Drop File" },
      { "<leader>ar", "<cmd>Aider add readonly<cr>", desc = "Add Read-Only" },
      { "<leader>aR", "<cmd>Aider reset<cr>", desc = "Reset Session" },
      -- Example nvim-tree.lua integration if needed
      { "<leader>a+", "<cmd>AiderTreeAddFile<cr>", desc = "Add File from Tree to Aider", ft = "NvimTree" },
      { "<leader>a-", "<cmd>AiderTreeDropFile<cr>", desc = "Drop File from Tree from Aider", ft = "NvimTree" },
    },
    dependencies = {
      "folke/snacks.nvim",
      --- The below dependencies are optional
      "catppuccin/nvim",
      "nvim-tree/nvim-tree.lua",
      --- Neo-tree integration
      {
        "nvim-neo-tree/neo-tree.nvim",
        opts = function(_, opts)
          -- Example mapping configuration (already set by default)
          -- opts.window = {
          --   mappings = {
          --     ["+"] = { "nvim_aider_add", desc = "add to aider" },
          --     ["-"] = { "nvim_aider_drop", desc = "drop from aider" }
          --     ["="] = { "nvim_aider_add_read_only", desc = "add read-only to aider" }
          --   }
          -- }
          require("nvim_aider.neo_tree").setup(opts)
        end,
      },
    },
    config = true,
  }

After installing, run :Aider health to check if everything is set up correctly.

⚙️ Configuration

There is no need to call setup if you don't want to change the default options.

require("nvim_aider").setup({
  -- Command that executes Aider
  aider_cmd = "aider",
  -- Command line arguments passed to aider
  args = {
    "--no-auto-commits",
    "--pretty",
    "--stream",
  },
  -- Automatically reload buffers changed by Aider (requires vim.o.autoread = true)
  auto_reload = false,
  -- Theme colors (automatically uses Catppuccin flavor if available)
  theme = {
    user_input_color = "#a6da95",
    tool_output_color = "#8aadf4",
    tool_error_color = "#ed8796",
    tool_warning_color = "#eed49f",
    assistant_output_color = "#c6a0f6",
    completion_menu_color = "#cad3f5",
    completion_menu_bg_color = "#24273a",
    completion_menu_current_color = "#181926",
    completion_menu_current_bg_color = "#f4dbd6",
  },
  -- snacks.picker.layout.Config configuration
  picker_cfg = {
    preset = "vscode",
  },
  -- Other snacks.terminal.Opts options
  config = {
    os = { editPreset = "nvim-remote" },
    gui = { nerdFontsVersion = "3" },
  },
  win = {
    wo = { winbar = "Aider" },
    style = "nvim_aider",
    position = "right",
  },
})

📚 API Reference

The plugin provides a structured API for programmatic integration. Access via require("nvim_aider").api

Core Functions

local api = require("nvim_aider").api

health_check()

Verify plugin health status

api.health_check()

toggle_terminal(opts?)

Toggle Aider terminal window

api.toggle_terminal()

Terminal Operations

send_to_terminal(text, opts?)

Send raw text directly to Aider

api.send_to_terminal("Fix the login validation")

send_command(command, input?, opts?)

Execute specific Aider command

api.send_command("/commit", "Add error handling")

reset_session(opts?)

Drop all files and clear chat history

api.reset_session()

File Management

add_file(filepath)

Add specific file to session

api.add_file("/src/utils.lua")

drop_file(filepath)

Remove file from session

api.drop_file("/outdated/legacy.py")

add_current_file()

Add current buffer's file (uses add_file internally)

vim.api.nvim_create_autocmd("BufWritePost", {
  callback = function()
    api.add_current_file()
  end
})

drop_current_file()

Remove current buffer's file

api.drop_current_file()

add_read_only_file()

Add current buffer as read-only reference

api.add_read_only_file()

Buffer Operations

send_buffer_with_prompt(opts?)

Send entire buffer content with optional prompt

api.send_buffer_with_prompt()

send_diagnostics_with_prompt(opts?)

Send current buffer's diagnostics with an optional prompt

api.send_diagnostics_with_prompt()

UI Components

open_command_picker(opts?, callback?)

Interactive command selector with custom handling

api.open_command_picker(nil, function(picker, item)
  if item.text == "/custom" then
    -- Implement custom command handling
  else
    -- Default behavior
    picker:close()
    api.send_command(item.text)
  end
end)

🧩 Other Aider Neovim plugins


Made with 🤖 using Aider

About

🤖 Seamlessly integrate Aider with Neovim for an enhanced AI-assisted coding experience!

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 7

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy