avante.nvim

by yetone (community) · Neovim 0.10+

Plugin Dev Tools Open Source ★ Must have v0.1.2 · 02.06.2026 активный

Плагин для Neovim, который добавляет Cursor-подобный AI-интерфейс: боковая панель с чатом, inline diff, автоматическое применение изменений к коду — не выходя из редактора. Возможности: - Боковая панель (sidebar) с чатом прямо в Neovim - Inline suggestions на основе контекста файла - Diff-просмотр изменений перед принятием - Поддержка Claude, OpenAI, Gemini, Ollama, Groq - Выделение кода → объяснение / рефакторинг - LSP-интеграция: контекст ошибок и диагностики - RAG поверх codebase

v0.1.2
02.06.2026 current
Добавлен 18.06.2026 · Обновлён 24.07.2026 · Dev Tools
Установка
# lazy.nvim:
{
  "yetone/avante.nvim",
  event = "VeryLazy",
  build = "make",
  opts = {
    provider = "claude",
    claude = {
      endpoint = "https://api.anthropic.com",
      model = "claude-opus-4-5",
      api_key_name = "ANTHROPIC_API_KEY",
    },
  },
  dependencies = {
    "nvim-treesitter/nvim-treesitter",
    "stevearc/dressing.nvim",
    "MunifTanjim/nui.nvim",
  },
}
переведено ИИ

логотип

avante.nvim

Neovim: v0.10+ Статус Lua CI Статус Rust CI Статус pre-commit Discord

avante.nvim — это плагин для Neovim, предназначенный для эмуляции поведения AI IDE Cursor. Он предоставляет пользователям AI-управляемые подсказки для кода и возможность применять эти рекомендации непосредственно к своим исходным файлам с минимальными усилиями.

Посмотреть китайскую версию

[!NOTE]

🥰 Этот проект активно развивается, и в скором времени будут добавлены многие интересные функции. Следите за обновлениями!

https://github.com/user-attachments/assets/510e6270-b6cf-459d-9a2f-15b397d1fe53

https://github.com/user-attachments/assets/86140bfd-08b4-483d-a887-1b701d9e37dd

Спонсорство ❤️

Если вам нравится этот проект, пожалуйста, рассмотрите возможность поддержать меня на Patreon, так как это помогает мне продолжать его поддерживать и улучшать:

Станьте спонсором

Возможности

  • AI-управляемая помощь в коде: Взаимодействуйте с AI, задавая вопросы о текущем файле кода и получая интеллектуальные предложения по улучшению или изменению.
  • Применение одной кнопкой: Быстро применяйте предложенные AI изменения к вашему исходному коду одной командой, упрощая процесс редактирования и экономя время.
  • Файлы инструкций для конкретного проекта: Настройте поведение AI, добавив файл в формате Markdown (по умолчанию avante.md) в корень проекта. Этот файл автоматически используется при смене рабочей области. Вы также можете настроить собственное имя файла для инструкций, специфичных для проекта.

Режим Avante Zen

Из-за широкого распространения claude code становится ясно, что это эпоха Coding Agent CLI. В результате появляется множество аргументов: в эпоху Vibe Coding редакторы больше не нужны; нужно только использовать CLI в терминале. Но задумывались ли люди о том, что более полувека редакторы на основе терминала решили и стандартизировали главную проблему терминальных приложений — а именно неуклюжие TUI-взаимодействия! Сколько бы эти Coding Agent CLI ни оптимизировали свой UI/UX, их UI/UX всегда будет подмножеством редакторов на основе терминала (Vim, Emacs)! Они не могут достичь элегантной абстракции действий Vim + текстовых объектов (представьте, как вы обычно редактируете большие многострочные подсказки в Agent CLI), и не могут использовать тысячи зрелых плагинов Vim/Neovim для оптимизации TUI UI/UX — таких как easymotions и другие. Более того, когда им нужно посмотреть или изменить код, они часто вынуждены переключаться на другие приложения, что грубо нарушает целостность опыта UI/UX.

Поэтому родился Avante Zen Mode! Он выглядит как Vibe Coding Agent CLI, но под капотом полностью Neovim. Так что вы можете использовать свои мышечные операции Vim и эти многочисленные зрелые плагины Neovim. Одновременно, благодаря использованию ACP, он обладает всеми возможностями claude code / gemini-cli / codex! Почему бы не насладиться обоим?

Теперь всё, что вам нужно сделать, — это создать псевдоним этой команды avante; тогда каждый раз, просто набирая avante, как при использовании claude code, вы войдете в режим Avante Zen!

alias avante='nvim -c "lua vim.defer_fn(function()require(\"avante.api\").zen_mode()end, 100)"'

Эффект выглядит следующим образом:

Avante Zen Mode

Инструкции для проекта с avante.md

Файл avante.md позволяет предоставить AI контекст и инструкции, специфичные для проекта. Этот файл должен быть размещен в корне вашего проекта и будет автоматически использоваться при всех взаимодействиях с avante.

Рекомендации по использованию avante.md

Чтобы максимально эффективно использовать файл инструкций проекта, рекомендуется следующая структура:

Ваша роль

определите личность и уровень экспертности AI для вашего проекта:

### your role

you are an expert senior software engineer specializing in [technology stack]. you have deep knowledge of [specific frameworks/tools] and understand best practices for [domain/industry]. you write clean, maintainable, and well-documented code. you prioritize code quality, performance, and security in all your recommendations.

Ваша миссия

ясно опишите, на чем должен сосредоточиться AI и как он должен помогать:

### your mission

your primary goal is to help build and maintain [project description]. you should:

- provide code suggestions that follow our established patterns and conventions
- help debug issues by analyzing code and suggesting solutions
- assist with refactoring to improve code quality and maintainability
- suggest optimizations for performance and scalability
- ensure all code follows our security guidelines
- help write comprehensive tests for new features

Дополнительные рекомендуемые разделы

  • Контекст проекта: краткое описание проекта, его целей и целевых пользователей
  • Технологический стек: список используемых технологий, фреймворков и инструментов
  • Стандарты кодирования: конкретные соглашения, стили и паттерны, которым нужно следовать
  • Руководство по архитектуре: как должны взаимодействовать и организовываться компоненты
  • Требования к тестированию: стратегии тестирования и ожидаемый уровень покрытия
  • Соображения безопасности: конкретные требования или ограничения безопасности

Пример avante.md

# project instructions for myapp

## your role

you are an expert full-stack developer specializing in react, node.js, and typescript. you understand modern web development practices and have experience with our tech stack.

## your mission

help build a scalable e-commerce platform by:

- writing type-safe typescript code
- following react best practices and hooks patterns
- implementing restful apis with proper error handling
- ensuring responsive design with tailwind css
- writing comprehensive unit and integration tests

## project context

myapp is a modern e-commerce platform targeting small businesses. we prioritize performance, accessibility, and user experience.

## technology stack

- frontend: react 18, typescript, tailwind css, vite
- backend: node.js, express, prisma, postgresql
- testing: jest, react testing library, playwright
- deployment: docker, aws

## coding standards

- use functional components with hooks
- prefer composition over inheritance
- write self-documenting code with clear variable names
- add jsdoc comments for complex functions
- follow the existing folder structure and naming conventions

Установка

Для сборки бинарного файла, если вы хотите собрать из исходников, необходим cargo. В противном случае будут использоваться curl и tar для получения предварительно собранных бинарных файлов с GitHub.

lazy.nvim (рекомендуется)

{
"yetone/avante.nvim",
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
-- ⚠️ must add this setting! ! !
build = vim.fn.has("win32") ~= 0
    and "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false"
    or "make",
event = "VeryLazy",
version = false, -- Never set this value to "*"! Never!
---@module 'avante'
---@type avante.Config
opts = {
  -- add any opts here
  -- this file can contain specific instructions for your project
  instructions_file = "avante.md",
  -- for example
  provider = "claude",
  providers = {
    claude = {
      endpoint = "https://api.anthropic.com",
      model = "claude-sonnet-4-20250514",
      timeout = 30000, -- Timeout in milliseconds
        extra_request_body = {
          temperature = 0.75,
          max_tokens = 20480,
        },
    },
    moonshot = {
      endpoint = "https://api.moonshot.ai/v1",
      model = "kimi-k2-0711-preview",
      timeout = 30000, -- Timeout in milliseconds
      extra_request_body = {
        temperature = 0.75,
        max_tokens = 32768,
      },
    },
  },
},
dependencies = {
  "nvim-lua/plenary.nvim",
  "MunifTanjim/nui.nvim",
  --- The below dependencies are optional,
  "nvim-mini/mini.pick", -- for file_selector provider mini.pick
  "nvim-telescope/telescope.nvim", -- for file_selector provider telescope
  "hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
  "ibhagwan/fzf-lua", -- for file_selector provider fzf
  "stevearc/dressing.nvim", -- for input provider dressing
  "folke/snacks.nvim", -- for input provider snacks
  "nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
  "zbirenbaum/copilot.lua", -- for providers='copilot'
  {
    -- support for image pasting
    "HakonHarnes/img-clip.nvim",
    event = "VeryLazy",
    opts = {
      -- recommended settings
      default = {
        embed_image_as_base64 = false,
        prompt_for_file_name = false,
        drag_and_drop = {
          insert_mode = true,
        },
        -- required for Windows users
        use_absolute_path = true,
      },
    },
  },
  {
    -- Make sure to set this up properly if you have lazy=true
    'MeanderingProgrammer/render-markdown.nvim',
    opts = {
      file_types = { "markdown", "Avante" },
    },
    ft = { "markdown", "Avante" },
  },
},
}

Pack

Pack — это менеджер плагинов «из коробки», доступный начиная с Neovim v0.12.

vim.api.nvim_create_autocmd(
'PackChanged',
{
  callback = function(ev)
    local name, kind = ev.data.spec.name, ev.data.kind
    if name == 'avante.nvim' and (kind == 'install' or kind == 'update') then
      -- Use `make BUILD_FROM_SOURCE=true` to build from source
      vim.system({ 'make' }, { cwd = ev.data.path }):wait()
    end
  end
}
)

vim.pack.add({
{
  src='https://github.com/yetone/avante.nvim',
  version='main'  -- default
},

-- Deps
'https://github.com/nvim-lua/plenary.nvim',
'https://github.com/MunifTanjim/nui.nvim',

-- Optional deps
'https://github.com/MeanderingProgrammer/render-markdown.nvim',
'https://github.com/hrsh7th/nvim-cmp',
'https://github.com/nvim-tree/nvim-web-devicons', -- or 'echasnovski/mini.icons'
'https://github.com/HakonHarnes/img-clip.nvim',
'https://github.com/zbirenbaum/copilot.lua',
'https://github.com/folke/snacks.nvim', -- for modern input UI
})

-- Config customizations
require('avante').setup({})

rocks.nvim

Выполните :Rocks install avante.nvim, а затем добавьте в ваш init.lua:

require('avante').setup()

vim-plug


call plug#begin()

" Deps
Plug 'nvim-lua/plenary.nvim'
Plug 'MunifTanjim/nui.nvim'
Plug 'MeanderingProgrammer/render-markdown.nvim'

" Optional deps
Plug 'hrsh7th/nvim-cmp'
Plug 'nvim-tree/nvim-web-devicons' "or Plug 'echasnovski/mini.icons'
Plug 'HakonHarnes/img-clip.nvim'
Plug 'zbirenbaum/copilot.lua'
Plug 'stevearc/dressing.nvim' " for enhanced input UI
Plug 'folke/snacks.nvim' " for modern input UI

" Yay, pass source=true if you want to build from source
Plug 'yetone/avante.nvim', { 'branch': 'main', 'do': 'make' }

call plug#end()

autocmd! User avante.nvim
lua << EOF
require('avante').setup({})
EOF

mini.deps

local add, later, now = MiniDeps.add, MiniDeps.later, MiniDeps.now

add({
source = 'yetone/avante.nvim',
monitor = 'main',
depends = {
  'nvim-lua/plenary.nvim',
  'MunifTanjim/nui.nvim',
  'echasnovski/mini.icons'
},
hooks = { post_checkout = function() vim.cmd('make') end }
})
--- optional
add({ source = 'hrsh7th/nvim-cmp' })
add({ source = 'zbirenbaum/copilot.lua' })
add({ source = 'HakonHarnes/img-clip.nvim' })
add({ source = 'MeanderingProgrammer/render-markdown.nvim' })

later(function() require('render-markdown').setup({...}) end)
later(function()
require('img-clip').setup({...}) -- config img-clip
require("copilot").setup({...}) -- setup copilot to your liking
require("avante").setup({...}) -- config for avante.nvim
end)

Packer


-- Required plugins
use 'nvim-lua/plenary.nvim'
use 'MunifTanjim/nui.nvim'
use 'MeanderingProgrammer/render-markdown.nvim'

-- Optional dependencies
use 'hrsh7th/nvim-cmp'
use 'nvim-tree/nvim-web-devicons' -- or use 'echasnovski/mini.icons'
use 'HakonHarnes/img-clip.nvim'
use 'zbirenbaum/copilot.lua'
use 'stevearc/dressing.nvim' -- for enhanced input UI
use 'folke/snacks.nvim' -- for modern input UI

-- Avante.nvim with build process
use {
  'yetone/avante.nvim',
  branch = 'main',
  run = 'make',
  config = function()
    require('avante').setup()
  end
}

Home Manager

programs.neovim = {
plugins = [
  {
    plugin = pkgs.vimPlugins.avante-nvim;
    type = "lua";
    config = ''
            require("avante").setup()
    ''; # or builtins.readFile ./plugins/avante.lua
  }
];
};

Nixvim

plugins.avante.enable = true;
plugins.avante.settings = {
  # setup options here
};

Lua

-- deps:
require('cmp').setup ({
-- use recommended settings from above
})
require('img-clip').setup ({
-- use recommended settings from above
})
require('copilot').setup ({
-- use recommended settings from above
})
require('render-markdown').setup ({
-- use recommended settings from above
})
require('avante').setup({
-- Example: Using snacks.nvim as input provider
input = {
  provider = "snacks", -- "native" | "dressing" | "snacks"
  provider_opts = {
    -- Snacks input configuration
    title = "Avante Input",
    icon = " ",
    placeholder = "Enter your API key...",
  },
},
-- Your other config here!
})

[!IMPORTANT]

В настоящее время avante.nvim совместим только с Neovim версии 0.11.0 или позже. Пожалуйста, убедитесь, что ваша версия Neovim соответствует этим требованиям, прежде чем продолжить.

[!NOTE]

При синхронной загрузке плагина мы рекомендуем делать require где-то после вашей цветовой схемы.

[!NOTE]

Рекомендуемые опции Neovim:

lua -- представления могут быть полностью свёрнуты только с глобальной строкой состояния vim.opt.laststatus = 3

[!TIP]

Любой плагин рендеринга, поддерживающий markdown, должен работать с Avante, если вы добавите поддерживаемый тип файла Avante. Смотрите https://github.com/yetone/avante.nvim/issues/175 и этот комментарий для получения дополнительной информации.

Конфигурация по умолчанию

Смотрите config.lua#L9 для полной конфигурации

Вы можете передать опции напрямую в setup():

require("avante").setup({
  provider = "claude",
  behaviour = {
    auto_suggestions = false,
  },
})

Либо определите те же опции в vim.g.avante перед вызовом setup():

vim.g.avante = {
  provider = "claude",
  behaviour = {
    auto_suggestions = false,
  },
}

require("avante").setup()

Если используются оба способа, опции, переданные в setup(), перезаписывают значения из vim.g.avante.

Конфигурация по умолчанию

{
---@alias Provider "claude" | "openai" | "azure" | "gemini" | "cohere" | "copilot" | string
---@type Provider
provider = "claude", -- The provider used in Aider mode or in the planning phase of Cursor Planning Mode
---@alias Mode "agentic" | "legacy"
---@type Mode
mode = "agentic", -- The default mode for interaction. "agentic" uses tools to automatically generate code, "legacy" uses the old planning method to generate code.
-- WARNING: Since auto-suggestions are a high-frequency operation and therefore expensive,
-- currently designating it as `copilot` provider is dangerous because: https://github.com/yetone/avante.nvim/issues/1048
-- Of course, you can reduce the request frequency by increasing `suggestion.debounce`.
auto_suggestions_provider = "claude",
providers = {
  claude = {
    endpoint = "https://api.anthropic.com",
    auth_type = "api" -- Set to "max" to sign in with Claude Pro/Max subscription
    model = "claude-3-5-sonnet-20241022",
    extra_request_body = {
      temperature = 0.75,
      max_tokens = 4096,
    },
  },
},
---Specify the special dual_boost mode
---1. enabled: Whether to enable dual_boost mode. Default to false.
---2. first_provider: The first provider to generate response. Default to "openai".
---3. second_provider: The second provider to generate response. Default to "claude".
---4. prompt: The prompt to generate response based on the two reference outputs.
---5. timeout: Timeout in milliseconds. Default to 60000.
---How it works:
--- When dual_boost is enabled, avante will generate two responses from the first_provider and second_provider respectively. Then use the response from the first_provider as provider1_output and the response from the second_provider as provider2_output. Finally, avante will generate a response based on the prompt and the two reference outputs, with the default Provider as normal.
---Note: This is an experimental feature and may not work as expected.
dual_boost = {
  enabled = false,
  first_provider = "openai",
  second_provider = "claude",
  prompt = "Based on the two reference outputs below, generate a response that incorporates elements from both but reflects your own judgment and unique perspective. Do not provide any explanation, just give the response directly. Reference Output 1: [{{provider1_output}}], Reference Output 2: [{{provider2_output}}]",
  timeout = 60000, -- Timeout in milliseconds
},
behaviour = {
  auto_suggestions = false, -- Experimental stage
  auto_set_highlight_group = true,
  auto_set_keymaps = true,
  auto_apply_diff_after_generation = false,
  support_paste_from_clipboard = false,
  minimize_diff = true, -- Whether to remove unchanged lines when applying a code block
  enable_token_counting = true, -- Whether to enable token counting. Default to true.
  auto_add_current_file = true, -- Whether to automatically add the current file when opening a new chat. Default to true.
  auto_approve_tool_permissions = true, -- Default: auto-approve all tools (no prompts)
  -- Examples:
  -- auto_approve_tool_permissions = false,                -- Show permission prompts for all tools
  -- auto_approve_tool_permissions = {"bash", "str_replace"}, -- Auto-approve specific tools only
  ---@type "popup" | "inline_buttons"
  confirmation_ui_style = "inline_buttons",
  --- Whether to automatically open files and navigate to lines when ACP agent makes edits
  ---@type boolean
  acp_follow_agent_locations = true,
},
prompt_logger = { -- logs prompts to disk (timestamped, for replay/debugging)
  enabled = true, -- toggle logging entirely
  log_dir = vim.fn.stdpath("cache") .. "/avante_prompts", -- directory where logs are saved
  fortune_cookie_on_success = false, -- shows a random fortune after each logged prompt (requires `fortune` installed)
  next_prompt = {
    normal = "<C-n>", -- load the next (newer) prompt log in normal mode
    insert = "<C-n>",
  },
  prev_prompt = {
    normal = "<C-p>", -- load the previous (older) prompt log in normal mode
    insert = "<C-p>",
  },
},
mappings = {
  --- @class AvanteConflictMappings
  diff = {
    ours = "co",
    theirs = "ct",
    all_theirs = "ca",
    both = "cb",
    cursor = "cc",
    next = "]x",
    prev = "[x",
  },
  suggestion = {
    accept = "<M-l>",
    next = "<M-]>",
    prev = "<M-[>",
    dismiss = "<C-]>",
  },
  jump = {
    next = "]]",
    prev = "[[",
  },
  submit = {
    normal = "<CR>",
    insert = "<C-s>",
  },
  cancel = {
    normal = { "<C-c>", "<Esc>", "q" },
    insert = { "<C-c>" },
  },
  sidebar = {
    apply_all = "A",
    apply_cursor = "a",
    retry_user_request = "r",
    edit_user_request = "e",
    switch_windows = "<Tab>",
    reverse_switch_windows = "<S-Tab>",
    remove_file = "d",
    add_file = "@",
    close = { "<Esc>", "q" },
    close_from_input = nil, -- e.g., { normal = "<Esc>", insert = "<C-d>" }
  },
},
selection = {
  enabled = true,
  hint_display = "delayed",
},
windows = {
  ---@type "right" | "left" | "top" | "bottom"
  position = "right", -- the position of the sidebar
  wrap = true, -- similar to vim.o.wrap
  width = 30, -- default % based on available width
  sidebar_header = {
    enabled = true, -- true, false to enable/disable the header
    align = "center", -- left, center, right for title
    rounded = true,
  },
  spinner = {
    editing = { "⡀", "⠄", "⠂", "⠁", "⠈", "⠐", "⠠", "⢀", "⣀", "⢄", "⢂", "⢁", "⢈", "⢐", "⢠", "⣠", "⢤", "⢢", "⢡", "⢨", "⢰", "⣰", "⢴", "⢲", "⢱", "⢸", "⣸", "⢼", "⢺", "⢹", "⣹", "⢽", "⢻", "⣻", "⢿", "⣿" },
    generating = { "·", "✢", "✳", "∗", "✻", "✽" }, -- Spinner characters for the 'generating' state
    thinking = { "🤯", "🙄" }, -- Spinner characters for the 'thinking' state
  },
  input = {
    prefix = "> ",
    height = 8, -- Height of the input window in vertical layout
  },
  edit = {
    border = "rounded",
    start_insert = true, -- Start insert mode when opening the edit window
  },
  ask = {
    floating = false, -- Open the 'AvanteAsk' prompt in a floating window
    start_insert = true, -- Start insert mode when opening the ask window
    border = "rounded",
    ---@type "ours" | "theirs"
    focus_on_apply = "ours", -- which diff to focus after applying
  },
},
highlights = {
  ---@type AvanteConflictHighlights
  diff = {
    current = "DiffText",
    incoming = "DiffAdd",
  },
},
--- @class AvanteConflictUserConfig
diff = {
  autojump = true,
  ---@type string | fun(): any
  list_opener = "copen",
  --- Override the 'timeoutlen' setting while hovering over a diff (see :help timeoutlen).
  --- Helps to avoid entering operator-pending mode with diff mappings starting with `c`.
  --- Disable by setting to -1.
  override_timeoutlen = 500,
},
suggestion = {
  debounce = 600,
  throttle = 600,
},
}

Пользователи Blink.cmp

Для пользователей blink cmp (альтернатива nvim-cmp) смотрите инструкции по конфигурации ниже. Это достигается путем эмуляции nvim-cmp с помощью blink.compat или вы можете использовать Kaiser-Yang/blink-cmp-avante.

Lua

    selector = {
      --- @alias avante.SelectorProvider "native" | "fzf_lua" | "mini_pick" | "snacks" | "telescope" | fun(selector: avante.ui.Selector): nil
      --- @type avante.SelectorProvider
      provider = "fzf",
      -- Options override for custom providers
      provider_opts = {},
    }

Чтобы создать пользовательский поставщик селектора, вы можете указать пользовательскую функцию для запуска палитры выбора элементов и передачи выбранных элементов в обратный вызов on_select.

    selector = {
      ---@param selector avante.ui.Selector
      provider = function(selector)
        local items = selector.items ---@type avante.ui.SelectorItem[]
        local title = selector.title ---@type string
        local on_select = selector.on_select ---@type fun(selected_item_ids: string[]|nil): nil

        --- your customized picker logic here
      end,
    }

Конфигурация поставщика ввода

Avante.nvim поддерживает несколько поставщиков ввода для пользовательского ввода (например, ввод API-ключа). Вы можете настроить, какой поставщик использовать:

**Встроенный поставщик ввода (По умолчанию)**
{
input = {
  provider = "native", -- Uses vim.ui.input
  provider_opts = {},
}
}
**Поставщик ввода Dressing.nvim** Для улучшенного пользовательского интерфейса ввода с лучшим стилем и функционалом:
{
input = {
  provider = "dressing",
  provider_opts = {},
}
}
Вам потребуется установить dressing.nvim:
-- With lazy.nvim
{ "stevearc/dressing.nvim" }
**Поставщик ввода Snacks.nvim (Рекомендуемый)** Для современного, многофункционального пользовательского интерфейса ввода:
{
input = {
  provider = "snacks",
  provider_opts = {
    -- Additional snacks.input options
    title = "Avante Input",
    icon = " ",
  },
}
}
Вам потребуется установить snacks.nvim:
-- With lazy.nvim
{ "folke/snacks.nvim" }
**Пользовательский поставщик ввода** Чтобы создать пользовательский поставщик ввода, вы можете указать функцию:
{
input = {
  ---@param input avante.ui.Input
  provider = function(input)
    local title = input.title ---@type string
    local default = input.default ---@type string
    local conceal = input.conceal ---@type boolean
    local on_submit = input.on_submit ---@type fun(result: string|nil): nil

    --- your customized input logic here
  end,
}
}
Выберите селектор, отличный от встроенного (по умолчанию), так как у него в настоящее время есть проблема. Для пользователей Lazyvim скопируйте полную конфигурацию для blink.cmp с веб-сайта или расширьте параметры.
      compat = {
        "avante_commands",
        "avante_mentions",
        "avante_files",
      }
Для остальных пользователей просто добавьте пользовательский поставщик. ### Доступные источники дополнения Avante.nvim предоставляет несколько источников дополнения, которые можно интегрировать с blink.cmp: #### Упоминания (триггер `@`) Упоминания позволяют быстро ссылаться на определенные функции или добавлять файлы в контекст чата: - `@codebase` - Включить контекст проекта и отображение репозитория - `@diagnostics` - Включить информацию об ошибках диагностики - `@file` - Открыть селектор файлов для добавления файлов в контекст чата - `@quickfix` - Добавить файлы из списка быстрого исправления в контекст чата - `@buffers` - Добавить открытые буферы в контекст чата #### Слэш-команды (триггер `/`) Встроенные слэш-команды для распространенных операций: - `/help` - Показать справочное сообщение с доступными командами - `/init` - Инициализировать AGENTS.md на основе текущего проекта - `/clear` - Очистить историю чата - `/new` - Начать новый чат - `/compact` - Сжать сообщения истории для экономии токенов - `/lines <начало>-<конец> <вопрос>` - Спросить о конкретных строках - `/commit` - Сгенерировать сообщение коммита для изменений #### Горячие клавиши (триггер `#`) Горячие клавиши обеспечивают быстрый доступ к предопределенным шаблонам запросов. Вы можете настроить их в своей конфигурации:
{
  shortcuts = {
    {
      name = "refactor",
      description = "Refactor code with best practices",
      details = "Automatically refactor code to improve readability, maintainability, and follow best practices while preserving functionality",
      prompt = "Please refactor this code following best practices, improving readability and maintainability while preserving functionality."
    },
    {
      name = "test",
      description = "Generate unit tests",
      details = "Create comprehensive unit tests covering edge cases, error scenarios, and various input conditions",
      prompt = "Please generate comprehensive unit tests for this code, covering edge cases and error scenarios."
    },
    -- Add more custom shortcuts...
  }
}
Когда вы вводите `#refactor` во вводе, он автоматически заменяется соответствующим текстом запроса. ### Пример конфигурации Вот полный пример конфигурации blink.cmp со всеми источниками Avante:
      default = {
        ...
        "avante_commands",
        "avante_mentions",
        "avante_shortcuts",
        "avante_files",
      }
      providers = {
        avante_commands = {
          name = "avante_commands",
          module = "blink.compat.source",
          score_offset = 90, -- show at a higher priority than lsp
          opts = {},
        },
        avante_files = {
          name = "avante_files",
          module = "blink.compat.source",
          score_offset = 100, -- show at a higher priority than lsp
          opts = {},
        },
        avante_mentions = {
          name = "avante_mentions",
          module = "blink.compat.source",
          score_offset = 1000, -- show at a higher priority than lsp
          opts = {},
        },
        avante_shortcuts = {
          name = "avante_shortcuts",
          module = "blink.compat.source",
          score_offset = 1000, -- show at a higher priority than lsp
          opts = {},
        }
        ...
    }

Использование

Использование подписки Claude Pro/Max

Чтобы войти с помощью подписки Claude, установите auth_type записи поставщика Claude в вашей конфигурации на "max", перезапустите Neovim, и процесс аутентификации начнется в вашем браузере. После входа и авторизации будет показан код, который необходимо скопировать в приглашение ввода в Neovim, что должно дать доступ к использованию вашей подписки с Avante.

Возможно, вам придется запустить AvanteSwitchProvider claude для начала аутентификации, если ранее был выбран другой поставщик.

-- Providers = { ...

  claude = {
    -- ...
    auth_type = "max",
  },

Основной функционал

Находясь на ранней стадии, avante.nvim в настоящее время поддерживает следующие базовые функции:

[!IMPORTANT]

Для большей согласованности между сессиями neovim рекомендуется устанавливать переменные окружения в вашем shell-файле. По умолчанию Avante предложит вам на старте ввести API-ключ для выбранного поставщика.

Охватывающие API-ключи (рекомендуется для изоляции)

Avante теперь поддерживает охватывающие API-ключи, позволяющие изолировать API-ключи специально для Avante, не затрагивая другие приложения. Просто добавьте префикс AVANTE_ к любому API-ключу:

```sh

Охватывающие ключи (рекомендуется)

export AVANTE_ANTHROPIC_API_KEY=your-claude-api-key export AVANTE_OPENAI_API_KEY=your-openai-api-key export AVANTE_AZURE_OPENAI_API_KEY=your-azure-api-key export AVANTE_GEMINI_API_KEY=your-gemini-api-key export AVANTE_CO_API_KEY=your-cohere-api-key export AVANTE_AIHUBMIX_API_KEY=your-aihubmix-api-key export AVANTE_MOONSHOT_API_KEY=your-moonshot-api-key ```

Глобальные API-ключи (устаревшие)

Вы по-прежнему можете использовать традиционные глобальные API-ключи, если предпочитаете:

Для Claude:

sh export ANTHROPIC_API_KEY=your-api-key

Для OpenAI:

sh export OPENAI_API_KEY=your-api-key

Для Azure OpenAI:

sh export AZURE_OPENAI_API_KEY=your-api-key

Для Amazon Bedrock:

Вы можете указать переменную окружения BEDROCK_KEYS для установки учетных данных. Когда эта переменная не указана, Bedrock использует цепочку учетных данных AWS по умолчанию (см. ниже).

sh export BEDROCK_KEYS=aws_access_key_id,aws_secret_access_key,aws_region[,aws_session_token]

Примечание: aws_session_token необязателен и необходим только при использовании временных учетных данных AWS.

Альтернативно Bedrock пытается разрешить учетные данные AWS с помощью Цепочки учетных данных по умолчанию. Это означает, что учетные данные могут быть, например, настроены через AWS CLI, храниться в вашем ~/.aws/profile, использоваться AWS SSO и т.д. В этом случае aws_region и, опционально, aws_profile следует указать в конфигурации bedrock, например:

lua bedrock = { model = "us.anthropic.claude-3-5-sonnet-20241022-v2:0", aws_profile = "bedrock", aws_region = "us-east-1", },

Примечание: Для Bedrock требуется установленный AWS CLI в вашей системе.

  1. Откройте файл кода в Neovim.
  2. Используйте команду :AvanteAsk, чтобы задать вопрос ИИ о коде.
  3. Просмотрите предложения ИИ.
  4. Примите рекомендуемые изменения непосредственно в вашем коде с помощью простой команды или привязки клавиш.

Примечание: Плагин все еще находится в активной разработке, и как его функциональность, так и интерфейс могут значительно измениться. Ожидайте некоторых неудобств и нестабильности по мере развития проекта.

Привязки клавиш

Для работы с avante.nvim доступны следующие привязки клавиш:

Привязка клавиш Описание
Боковая панель
]p следующий промпт
[p предыдущий промпт
A применить все
a применить под курсором
r повторить запрос пользователя
e редактировать запрос пользователя
<Tab> переключить окна
<S-Tab> обратное переключение окон
d удалить файл
@ добавить файл
q закрыть боковую панель
Leaderaa показать боковую панель
Leaderat переключить видимость боковой панели
Leaderar обновить боковую панель
Leaderaf переключить фокус боковой панели
Предложение
Leadera? выбрать модель
Leaderan новый запрос
Leaderae редактировать выделенные блоки
LeaderaS остановить текущий запрос ИИ
Leaderah выбрать из истории чатов
<M-l> принять предложение
<M-]> следующее предложение
<M-[> предыдущее предложение
<C-]> отклонить предложение
Leaderad переключить режим отладки
Leaderas переключить отображение предложений
LeaderaR переключить repomap
Файлы
Leaderac добавить текущий буфер в выбранные файлы
LeaderaB добавить все файлы буфера в выбранные файлы
Diff
co выбрать ours
ct выбрать theirs
ca выбрать все theirs
cb выбрать оба
cc выбрать курсор
]x перейти к следующему конфликту
[x перейти к предыдущему конфликту
Confirm
Ctrlwf сфокусировать окно подтверждения
c подтвердить код
r подтвердить ответ
i подтвердить ввод

[!NOTE]

Если вы используете lazy.nvim, то все привязки клавиш здесь будут установлены безопасно, то есть если <leader>aa уже привязан, то avante.nvim не будет назначать это сопоставление. В этом случае пользователь будет нести ответственность за настройку собственных. Подробнее см. в примечаниях о привязках клавиш.

Горячие клавиши Neotree

В боковой панели neotree вы также можете добавить новую клавишу для быстрого добавления файла/папки в Avante Selected Files.

Конфигурация Neotree

return {
{
  'nvim-neo-tree/neo-tree.nvim',
  config = function()
    require('neo-tree').setup({
      filesystem = {
        commands = {
          avante_add_files = function(state)
            local node = state.tree:get_node()
            local filepath = node:get_id()
            local relative_path = require('avante.utils').relative_path(filepath)

            local sidebar = require('avante').get()

            local open = sidebar:is_open()
            -- ensure avante sidebar is open
            if not open then
              require('avante.api').ask()
              sidebar = require('avante').get()
            end

            sidebar.file_selector:add_selected_file(relative_path)

            -- remove neo tree buffer
            if not open then
              sidebar.file_selector:remove_selected_file('neo-tree filesystem [1]')
            end
          end,
        },
        window = {
          mappings = {
            ['oa'] = 'avante_add_files',
          },
        },
      },
    })
  end,
},
}

Команды

Команда Описание Примеры
:AvanteAsk [question] [position] Спросить ИИ о вашем коде. Необязательный position задает положение окна, а ask включает/выключает режим прямого вопроса :AvanteAsk position=right Refactor this code here
:AvanteBuild Собрать зависимости для проекта
:AvanteChat Начать сессию чата с ИИ о вашей кодовой базе. По умолчанию ask=false
:AvanteChatNew Начать новую сессию чата. Текущий чат можно снова открыть с помощью селектора сессий чата
:AvanteHistory Открывает выборщик для ваших предыдущих сессий чата
:AvanteClear Очистить историю чата для текущей сессии чата
:AvanteEdit Редактировать выбранные блоки кода
:AvanteFocus Переключить фокус на/из боковой панели
:AvanteRefresh Обновить все окна Avante
:AvanteStop Остановить текущий запрос к ИИ
:AvanteSwitchProvider Переключить поставщика ИИ (например, openai)
:AvanteShowRepoMap Показать карту репозитория для структуры проекта
:AvanteToggle Переключить боковую панель Avante
:AvanteModels Показать список моделей
:AvanteSwitchSelectorProvider Переключить поставщика селектора avante (например, native, telescope, fzf_lua, mini_pick, snacks)

Группы подсветки

Группа подсветки Описание Примечания
AvanteTitle Заголовок
AvanteReversedTitle Используется для скругленной границы
AvanteSubtitle Заголовок выбранного кода
AvanteReversedSubtitle Используется для скругленной границы
AvanteThirdTitle Заголовок промпта
AvanteReversedThirdTitle Используется для скругленной границы
AvanteConflictCurrent Подсветка текущего конфликта По умолчанию берется из Config.highlights.diff.current
AvanteConflictIncoming Подсветка входящего конфликта По умолчанию берется из Config.highlights.diff.incoming
AvanteConflictCurrentLabel Подсветка метки текущего конфликта По умолчанию берется оттенок AvanteConflictCurrent
AvanteConflictIncomingLabel Подсветка метки входящего конфликта По умолчанию берется оттенок AvanteConflictIncoming
AvantePopupHint Подсказки использования во всплывающих меню
AvanteInlineHint Концовочная подсказка, отображаемая в визуальном режиме
AvantePromptInput Основная подсветка ввода промпта
AvantePromptInputBorder Подсветка границы ввода промпта По умолчанию берется из NormalFloat

Более подробную информацию см. в highlights.lua

Быстрое применение

«Быстрое применение» — это функция, которая позволяет мгновенно вносить изменения в код с высокой точностью, используя специализированные модели. Она воспроизводит функциональность мгновенного применения Cursor, обеспечивая бесшовное изменение кода без типичных задержек, характерных для традиционной генерации кода.

Назначение и преимущества

«Быстрое применение» решает распространенную проблему медленного применения кода в разработке с помощью ИИ. Вместо ожидания обработки и применения изменений полной языковой моделью, «Быстрое применение» использует специализированную «модель применения», которая может быстро и точно объединять изменения в коде с точностью 96-98% на скоростях 2500-4500+ токенов в секунду.

Основные преимущества:

  • Мгновенное применение: Изменения кода применяются немедленно без заметных задержек
  • Высокая точность: Специализированные модели достигают точности 96-98% для изменений кода
  • Плавный рабочий процесс: Поддерживает естественный ход разработки без перерывов
  • Поддержка большого контекста: Обрабатывает до 16k токенов как для входных, так и для выходных данных

Конфигурация

Чтобы включить «Быстрое применение», вам необходимо:

  1. Включить «Быстрое применение» в конфигурации:

lua behaviour = { enable_fastapply = true, -- Включить функцию Быстрого применения }, -- ... другая конфигурация

  1. Получить ключ API Morph: Перейдите на morphllm.com, создайте аккаунт и получите ключ API.

  2. Установить ключ API Morph:

bash export MORPH_API_KEY="your-api-key" 4. Сменить модель Morph: lua providers = { morph = { model = "morph-v3-large", }, }

Параметры моделей

Morph предоставляет различные модели, оптимизированные для разных вариантов использования:

Модель Скорость Точность Лимит контекста
morph-v3-fast 4500+ токенов/сек 96% 16k токенов
morph-v3-large 2500+ токенов/сек 98% 16k токенов
auto 2500-4500 ток/сек 98% 16k токенов

Как это работает

Когда Fast Apply включен и настроен провайдер Morph, avante.nvim будет:

  1. Использовать инструмент edit_file для модификации кода вместо традиционных инструментов
  2. Отправлять исходный код, инструкции по редактированию и фрагмент обновления в API Morph
  3. Получать полностью объединенный код обратно от специализированной модели для применения изменений
  4. Применять изменения напрямую в ваши файлы с высокой точностью

Процесс использует специализированный формат запроса, который включает:

  • <instructions>: Четкое описание того, какие изменения нужно внести
  • <code>: Исходное содержимое кода
  • <update>: Конкретные изменения с использованием маркеров усечения (// ... existing code ...)

Этот подход гарантирует, что модель для применения изменений сможет быстро и точно объединить ваши правки без накладных расходов полной генерации кода.

Ollama

Ollama является первоклассным провайдером для avante.nvim. Чтобы начать его использовать, вам нужно установить provider = "ollama" в конфигурации и задать поле model в разделе ollama на модель, которую вы хотите использовать. Ollama отключен по умолчанию, вам нужно предоставить реализацию для его метода is_env_set, чтобы правильно его включить. Например:

provider = "ollama",
providers = {
  ollama = {
    model = "qwq:32b",
    is_env_set = require("avante.providers.ollama").check_endpoint_alive,
  },
}

Поддержка ACP

Avante.nvim теперь поддерживает Agent Client Protocol (ACP), обеспечивая бесшовную интеграцию с AI-агентами, следующими этому стандартизированному протоколу связи. ACP предоставляет единый способ взаимодействия AI-агентов со средами разработки, предлагая расширенные возможности для редактирования кода, работы с файлами и выполнения инструментов.

Что такое ACP?

Agent Client Protocol (ACP) — это стандартизированный протокол, позволяющий AI-агентам общаться с инструментами и средами разработки. Он предоставляет:

  • Стандартизированную коммуникацию: Единый протокол на базе JSON-RPC для взаимодействий «агент-клиент»
  • Интеграцию инструментов: Поддержку различных инструментов разработки, таких как работа с файлами, выполнение кода и поиск
  • Управление сессиями: Постоянные сессии, сохраняющие контекст между взаимодействиями
  • Систему разрешений: Детальный контроль над тем, что агенты могут просматривать и изменять

Включение ACP

Для использования ACP-совместимых агентов с Avante.nvim вам нужно настроить провайдер ACP. Вот текущие поддерживаемые ACP-агенты:

Gemini CLI с ACP

{
  provider = "gemini-cli",
  -- other configuration options...
}

Claude Code с ACP

{
  provider = "claude-code",
  -- other configuration options...
}

Goose с ACP

{
  provider = "goose",
  -- other configuration options...
}

Codex с ACP

{
  provider = "codex",
  -- other configuration options...
}

Kimi CLI с ACP

{
  provider = "kimi-cli",
  -- other configuration options...
}

Конфигурация ACP

Провайдеры ACP настраиваются в секции acp_providers вашей конфигурации:

{
  acp_providers = {
    ["gemini-cli"] = {
      command = "gemini",
      args = { "--experimental-acp" },
      env = {
        NODE_NO_WARNINGS = "1",
        GEMINI_API_KEY = os.getenv("GEMINI_API_KEY"),
      },
    },
    ["claude-code"] = {
      command = "claude-agent-acp",
      args = { },
      env = {
        NODE_NO_WARNINGS = "1",
        ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY"),
      },
    },
    ["goose"] = {
      command = "goose",
      args = { "acp" },
    },
    ["codex"] = {
      command = "codex-acp",
      args = {},
      env = {
        NODE_NO_WARNINGS = "1",
        OPENAI_API_KEY = os.getenv("OPENAI_API_KEY"),
      },
    },
  },
  -- other configuration options...
}

Предварительные требования

Перед использованием ACP-агентов убедитесь, что у вас установлены необходимые инструменты:

  • Для Gemini CLI: Установите инструмент gemini CLI и задайте свой GEMINI_API_KEY
  • Для Claude Code: Установите пакет acp-claude-code через npm и задайте свой ANTHROPIC_API_KEY

ACP vs Традиционные провайдеры

Провайдеры ACP предлагают несколько преимуществ по сравнению с традиционными API-провайдерами:

  • Расширенный доступ к инструментам: Агенты могут напрямую взаимодействовать с вашей файловой системой, выполнять команды и использовать инструменты разработки
  • Постоянный контекст: Сессии сохраняют состояние между несколькими взаимодействиями
  • Тонкая настройка разрешений: Контролируйте, что именно агенты могут просматривать и изменять
  • Стандартизированный протокол: Совместим с любым ACP-совместимым агентом

Пользовательские провайдеры

Avante предоставляет набор провайдеров по умолчанию, но пользователи также могут создавать собственные провайдеры.

Для получения дополнительной информации см. Пользовательские провайдеры

Сервис RAG

Avante предоставляет сервис RAG (Retrieval-Augmented Generation), который является инструментом для получения необходимого контекста для генерации кода AI. По умолчанию он не включен. Вы можете включить его следующим образом:

  rag_service = { -- RAG Service configuration
    enabled = false, -- Enables the RAG service
    host_mount = os.getenv("HOME"), -- Host mount path for the rag service (Docker will mount this path)
    runner = "docker", -- Runner for the RAG service (can use docker or nix)
    llm = { -- Language Model (LLM) configuration for RAG service
      provider = "openai", -- LLM provider
      endpoint = "https://api.openai.com/v1", -- LLM API endpoint
      api_key = "OPENAI_API_KEY", -- Environment variable name for the LLM API key
      model = "gpt-4o-mini", -- LLM model name
      extra = nil, -- Additional configuration options for LLM
    },
    embed = { -- Embedding model configuration for RAG service
      provider = "openai", -- Embedding provider
      endpoint = "https://api.openai.com/v1", -- Embedding API endpoint
      api_key = "OPENAI_API_KEY", -- Environment variable name for the embedding API key
      model = "text-embedding-3-large", -- Embedding model name
      extra = {
        max_embedding_tokens = 512, -- Maximum tokens per chunk sent to the embedding model
      },
    },
    docker_extra_args = "", -- Extra arguments to pass to the docker command
  },

Сервис RAG в настоящее время позволяет отдельно настраивать модели LLM и эмбеддингов. В блоках конфигурации llm и embed вы можете задать следующие поля:

  • provider: Провайдер модели (например, "openai", "ollama", "dashscope" и "openrouter")
  • endpoint: Конечная точка API
  • api_key: Имя переменной окружения для ключа API
  • model: Имя модели
  • extra: Дополнительные параметры конфигурации

Для подробной конфигурации различных провайдеров моделей вы можете проверить здесь.

Кроме того, сервис RAG также зависит от Docker! (Для пользователей macOS рекомендуется OrbStack как альтернатива Docker).

host_mount — это путь, который будет смонтирован в контейнер, по умолчанию это домашний каталог. Монтирование необходимо для того, чтобы сервис RAG имел доступ к файлам на хост-машине. Вы сами решаете, хотите ли смонтировать весь каталог /, только каталог проекта или домашний каталог. Если вы планируете использовать avante и RAG для проектов, хранящихся за пределами вашего домашнего каталога, вам нужно установить host_mount в корневой каталог вашей файловой системы.

Монтирование будет только для чтения.

После изменения конфигурации rag_service вам нужно вручную удалить контейнер rag_service, чтобы новая конфигурация вступила в силу: docker rm -fv avante-rag-service

Веб-поисковые системы

В инструменты Avante включены некоторые веб-поисковые системы, в настоящее время поддерживаются:

По умолчанию используется Tavily, это можно изменить, настроив Config.web_search_engine.provider:

web_search_engine = {
  provider = "tavily", -- tavily, serpapi, google, kagi, brave, or searxng
  proxy = nil, -- proxy support, e.g., http://127.0.0.1:7890
}

Необходимые переменные окружения для провайдеров:

Отключение инструментов

Avante включает инструменты по умолчанию, но некоторые модели LLM не поддерживают инструменты. Вы можете отключить инструменты, установив disable_tools = true для провайдера. Например:

providers = {
  claude = {
    endpoint = "https://api.anthropic.com",
    model = "claude-sonnet-4-20250514",
    timeout = 30000, -- Timeout in milliseconds
    disable_tools = true, -- disable tools!
    extra_request_body = {
      temperature = 0,
      max_tokens = 4096,
    }
  }
}

Если вы хотите запретить некоторые инструменты, чтобы избежать их использования (например, Claude 3.7 чрезмерно использует инструмент python), вы можете отключить только определенные инструменты.

{
  disabled_tools = { "python" },
}

Список инструментов:

rag_search, python, git_diff, git_commit, glob, search_keyword, read_file_toplevel_symbols, read_file, create_file, move_path, copy_path, delete_path, create_dir, bash, web_search, fetch

Пользовательские инструменты

Avante позволяет вам определять пользовательские инструменты, которые могут использоваться AI во время генерации и анализа кода. Эти инструменты могут выполнять команды оболочки, запускать скрипты или выполнять любую необходимую вам пользовательскую логику.

Пример: Runner тестов Go

Вот пример пользовательского инструмента, запускающего модульные тесты Go:

{
custom_tools = {
  {
    name = "run_go_tests",  -- Unique name for the tool
    description = "Run Go unit tests and return results",  -- Description shown to AI
    command = "go test -v ./...",  -- Shell command to execute
    param = {  -- Input parameters (optional)
      type = "table",
      fields = {
        {
          name = "target",
          description = "Package or directory to test (e.g. './pkg/...' or './internal/pkg')",
          type = "string",
          optional = true,
        },
      },
    },
    returns = {  -- Expected return values
      {
        name = "result",
        description = "Result of the fetch",
        type = "string",
      },
      {
        name = "error",
        description = "Error message if the fetch was not successful",
        type = "string",
        optional = true,
      },
    },
    func = function(params, on_log, on_complete)  -- Custom function to execute
      local target = params.target or "./..."
      return vim.system({ "go", "test", "-v", target }, { text = true }):wait().stdout
    end,
  },
},
}

MCP

Теперь вы можете интегрировать функциональность MCP для Avante через mcphub.nvim. Подробную документацию см. в mcphub.nvim

Пользовательские промпты

По умолчанию avante.nvim предоставляет три различных режима для взаимодействия: planning, editing и suggesting, каждый со своим системным промптом.

  • planning: Используется с require("avante").toggle() на боковой панели
  • editing: Используется с require("avante").edit() для выделенного блока кода
  • suggesting: Используется с require("avante").get_suggestion():suggest() в потоке Tab.
  • cursor-planning: Используется с require("avante").toggle() в потоке Tab, но только когда включен режим cursor-planning.

Пользователи могут настраивать системные промпты через Config.system_prompt или Config.override_prompt_dir.

Config.system_prompt позволяет задать глобальный системный промпт. Мы рекомендуем вызывать это в пользовательских Autocmds в зависимости от ваших потребностей:

vim.api.nvim_create_autocmd("User", {
  pattern = "ToggleMyPrompt",
  callback = function() require("avante.config").override({system_prompt = "MY CUSTOM SYSTEM PROMPT"}) end,
})

vim.keymap.set("n", "<leader>am", function() vim.api.nvim_exec_autocmds("User", { pattern = "ToggleMyPrompt" }) end, { desc = "avante: toggle my prompt" })

Config.override_prompt_dir позволяет указать каталог, содержащий пользовательские шаблоны подсказок, которые перезапишут встроенные. Это полезно, если вы хотите хранить набор пользовательских подсказок вне конфигурации Neovim. Это может быть строка, представляющая путь к каталогу, или функция, возвращающая строку с путем к каталогу.

-- Example: Override with prompts from a specific directory
require("avante").setup({
  override_prompt_dir = vim.fn.expand("~/.config/nvim/avante_prompts"),
})

-- Example: Override with prompts from a function (dynamic directory)
require("avante").setup({
  override_prompt_dir = function()
    -- Your logic to determine the prompt directory
    return vim.fn.expand("~/.config/nvim/my_dynamic_prompts")
  end,
})

[!WARNING]

Если вы изменяете base.avanterules, убедитесь, что {% block custom_prompt %}{% endblock %} и {% block extra_prompt %}{% endblock %} существуют, иначе весь плагин может стать неработоспособным. Если вы не уверены в конкретных причинах или в том, что делаете, пожалуйста, не перезаписывайте встроенные подсказки. Встроенные подсказки работают очень хорошо.

Если вы хотите задать пользовательские подсказки для каждого режима, avante.nvim будет проверять корень проекта на основании предоставленного буфера, содержит ли он следующие шаблоны: *.{mode}.avanterules.

Правила для иерархии корней:

  • рабочие папки lsp
  • root_dir lsp
  • шаблон корня имени файла текущего буфера
  • шаблон корня cwd

Вы также можете настроить пользовательские каталоги для файлов avanterules с помощью опции rules:

require('avante').setup({
  rules = {
    project_dir = '.avante/rules', -- relative to project root, can also be an absolute path
    global_dir = '~/.config/avante/rules', -- absolute path
  },
})

Приоритет загрузки следующий:

  1. rules.project_dir
  2. rules.global_dir
  3. Корень проекта

Пример структуры каталогов для пользовательских подсказок

Если у вас есть следующая структура:

.
├── .git/
├── typescript.planning.avanterules
├── snippets.editing.avanterules
├── suggesting.avanterules
└── src/

  • typescript.planning.avanterules будет использоваться для режима planning
  • snippets.editing.avanterules будет использоваться для режима editing
  • suggesting.avanterules будет использоваться для режима suggesting.

[!important]

*.avanterules — это файл шаблона jinja, который будет отрисован с помощью minijinja. Смотрите шаблоны для примеров того, как расширять текущие шаблоны.

Интеграция

Avante.nvim может быть расширен для работы с другими плагинами с помощью модулей расширений. Ниже приведен пример интеграции Avante с nvim-tree, который позволяет выбирать или отменять выбор файлов непосредственно из интерфейса NvimTree:

{
    "yetone/avante.nvim",
    event = "VeryLazy",
    keys = {
        {
            "<leader>a+",
            function()
                local tree_ext = require("avante.extensions.nvim_tree")
                tree_ext.add_file()
            end,
            desc = "Select file in NvimTree",
            ft = "NvimTree",
        },
        {
            "<leader>a-",
            function()
                local tree_ext = require("avante.extensions.nvim_tree")
                tree_ext.remove_file()
            end,
            desc = "Deselect file in NvimTree",
            ft = "NvimTree",
        },
    },
    opts = {
        --- other configurations
        selector = {
            exclude_auto_select = { "NvimTree" },
        },
    },
}

Задачи

  • [x] Чат с текущим файлом
  • [x] Применение патча diff
  • [x] Чат с выделенным блоком
  • [x] Слэш-команды
  • [x] Редактирование выделенного блока
  • [x] Умный таб (Поток курсора)
  • [x] Чат с проектом (Вы можете использовать @codebase для чата со всем проектом)
  • [x] Чат с выбранными файлами
  • [x] Использование инструментов
  • [x] MCP
  • [x] ACP
  • [ ] Улучшенная индексация кодовой базы

Дорожная карта

  • Улучшенные ИИ-взаимодействия: Повышение глубины анализа и рекомендаций ИИ для более сложных сценариев кодирования.
  • Интеграция LSP + Tree-sitter + LLM: Интеграция с LSP и Tree-sitter и LLM для предоставления более точных и мощных предложений и анализа кода.

ЧАВО

Как отключить агентный режим?

Avante.nvim предоставляет два режима взаимодействия:

  • agentic (по умолчанию): Использует ИИ-инструменты для автоматической генерации и применения изменений кода
  • legacy: Использует традиционный метод планирования без автоматического выполнения инструментов

Чтобы отключить агентный режим и переключиться на традиционный, обновите свою конфигурацию:

{
  mode = "legacy", -- Switch from "agentic" to "legacy"
  -- ... your other configuration options
}

В чем разница?

  • Агентный режим: ИИ может автоматически выполнять такие инструменты, как операции с файлами, команды bash, веб-поиск и т.д., для выполнения сложных задач.
  • Традиционный режим: ИИ предоставляет предложения и планы, но требует ручного подтверждения для всех действий.

Когда следует использовать традиционный режим?

  • Если вы предпочитаете больший контроль над действиями, которые предпринимает ИИ.
  • Если вы обеспокоены безопасностью автоматического выполнения инструментов.
  • Если вы хотите вручную проверять каждый шаг перед применением изменений.
  • Если вы работаете в чувствительной среде, где нежелательны автоматические изменения кода.

Вы также можете отключить конкретные инструменты, оставив агентный режим включенным, с помощью настройки disabled_tools:

{
  mode = "agentic",
  disabled_tools = { "bash", "python" }, -- Disable specific tools
  -- ... your other configuration options
}

Участие в разработке

Вклад в avante.nvim приветствуется! Если вы заинтересованы в помощи, не стесняйтесь отправлять pull request'ы или открывать проблемы.

Смотрите вики для получения дополнительных рецептов и советов.

Благодарности

Мы хотим выразить нашу искреннюю благодарность авторам следующих проектов с открытым исходным кодом, чей код стал бесценным источником вдохновения и.reference для разработки avante.nvim:

Nvim Plugin Лицензия Функциональность Расположение
git-conflict.nvim Без лицензии Функциональность сравнения diff lua/avante/diff.lua
ChatGPT.nvim Лицензия Apache 2.0 Подсчет количества токенов lua/avante/utils/tokens.lua
img-clip.nvim Лицензия MIT Поддержка изображений из буфера обмена lua/avante/clipboard.lua
copilot.lua Лицензия MIT Поддержка Copilot lua/avante/providers/copilot.lua
jinja.vim Лицензия MIT Поддержка типа файла шаблонов syntax/jinja.vim
codecompanion.nvim Лицензия MIT Поддержка логики секретов lua/avante/providers/init.lua
aider Лицензия Apache 2.0 Пользовательский промпт режима планирования lua/avante/templates/planning.avanterules

Высокое качество и находчивость исходного кода этих проектов были невероятно полезны на протяжении всего нашего процесса разработки. Мы выражаем нашу искреннюю благодарность и уважение авторам и участникам этих проектов. Именно бескорыстная преданность сообщества с открытым исходным кодом толкает вперед такие проекты, как avante.nvim.

Спонсоры

Meshy AI
Meshy AI
 
Генератор 3D-моделей №1 на ИИ для создателей
BabelTower API
BabelTower API
 
Без необходимости аккаунта, используйте любую модель мгновенно

Лицензия

avante.nvim лицензирован под Лицензией Apache 2.0. Для получения дополнительной информации, пожалуйста, обратитесь к файлу LICENSE.

История звезд

NebulaGraph Data Intelligence Suite(ngdi)

Комментарии
Войдите, чтобы оставить комментарий