by yetone (community) Neovim 0.10+
Плагин для Neovim, который добавляет Cursor-подобный AI-интерфейс: боковая панель с чатом, inline diff, автоматическое применение изменений к коду — не выходя из редактора. Возможности: - Боковая панель (sidebar) с чатом прямо в Neovim - Inline suggestions на основе контекста файла - Diff-просмотр изменений перед принятием - Поддержка Claude, OpenAI, Gemini, Ollama, Groq - Выделение кода → объяснение / рефакторинг - LSP-интеграция: контекст ошибок и диагностики - RAG поверх codebase
# 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, предназначенный для эмуляции поведения 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, так как это помогает мне продолжать его поддерживать и улучшать:
avante.md) в корень проекта. Этот файл автоматически используется при смене рабочей области. Вы также можете настроить собственное имя файла для инструкций, специфичных для проекта.Из-за широкого распространения 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.md позволяет предоставить AI контекст и инструкции, специфичные для проекта. Этот файл должен быть размещен в корне вашего проекта и будет автоматически использоваться при всех взаимодействиях с avante.
Чтобы максимально эффективно использовать файл инструкций проекта, рекомендуется следующая структура:
определите личность и уровень экспертности 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
# 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 (альтернатива 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, установите 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 в вашей системе.
:AvanteAsk, чтобы задать вопрос ИИ о коде.Примечание: Плагин все еще находится в активной разработке, и как его функциональность, так и интерфейс могут значительно измениться. Ожидайте некоторых неудобств и нестабильности по мере развития проекта.
Для работы с 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 вы также можете добавить новую клавишу для быстрого добавления файла/папки в 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+ токенов в секунду.
Основные преимущества:
Чтобы включить «Быстрое применение», вам необходимо:
lua
behaviour = {
enable_fastapply = true, -- Включить функцию Быстрого применения
},
-- ... другая конфигурация
Получить ключ API Morph: Перейдите на morphllm.com, создайте аккаунт и получите ключ API.
Установить ключ 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 будет:
edit_file для модификации кода вместо традиционных инструментовПроцесс использует специализированный формат запроса, который включает:
<instructions>: Четкое описание того, какие изменения нужно внести<code>: Исходное содержимое кода<update>: Конкретные изменения с использованием маркеров усечения (// ... existing code ...)Этот подход гарантирует, что модель для применения изменений сможет быстро и точно объединить ваши правки без накладных расходов полной генерации кода.
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,
},
}
Avante.nvim теперь поддерживает Agent Client Protocol (ACP), обеспечивая бесшовную интеграцию с AI-агентами, следующими этому стандартизированному протоколу связи. ACP предоставляет единый способ взаимодействия AI-агентов со средами разработки, предлагая расширенные возможности для редактирования кода, работы с файлами и выполнения инструментов.
Agent Client Protocol (ACP) — это стандартизированный протокол, позволяющий AI-агентам общаться с инструментами и средами разработки. Он предоставляет:
Для использования ACP-совместимых агентов с Avante.nvim вам нужно настроить провайдер ACP. Вот текущие поддерживаемые ACP-агенты:
{
provider = "gemini-cli",
-- other configuration options...
}
{
provider = "claude-code",
-- other configuration options...
}
{
provider = "goose",
-- other configuration options...
}
{
provider = "codex",
-- other configuration options...
}
{
provider = "kimi-cli",
-- other configuration options...
}
Провайдеры 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_API_KEYacp-claude-code через npm и задайте свой ANTHROPIC_API_KEYПровайдеры ACP предлагают несколько преимуществ по сравнению с традиционными API-провайдерами:
Avante предоставляет набор провайдеров по умолчанию, но пользователи также могут создавать собственные провайдеры.
Для получения дополнительной информации см. Пользовательские провайдеры
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: Конечная точка APIapi_key: Имя переменной окружения для ключа APImodel: Имя модели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
}
Необходимые переменные окружения для провайдеров:
TAVILY_API_KEYSERPAPI_API_KEYGOOGLE_SEARCH_API_KEY как ключ APIGOOGLE_SEARCH_ENGINE_ID как ID поисковой системыKAGI_API_KEY как API-токенBRAVE_API_KEY как ключ APISEARXNG_API_URL как URL APIAvante включает инструменты по умолчанию, но некоторые модели 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 во время генерации и анализа кода. Эти инструменты могут выполнять команды оболочки, запускать скрипты или выполнять любую необходимую вам пользовательскую логику.
Вот пример пользовательского инструмента, запускающего модульные тесты 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 для 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.
Правила для иерархии корней:
Вы также можете настроить пользовательские каталоги для файлов 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
},
})
Приоритет загрузки следующий:
rules.project_dirrules.global_dirПример структуры каталогов для пользовательских подсказок
Если у вас есть следующая структура:
.
├── .git/
├── typescript.planning.avanterules
├── snippets.editing.avanterules
├── suggesting.avanterules
└── src/
typescript.planning.avanterules будет использоваться для режима planningsnippets.editing.avanterules будет использоваться для режима editingsuggesting.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" },
},
},
}
@codebase для чата со всем проектом)Avante.nvim предоставляет два режима взаимодействия:
agentic (по умолчанию): Использует ИИ-инструменты для автоматической генерации и применения изменений кодаlegacy: Использует традиционный метод планирования без автоматического выполнения инструментовЧтобы отключить агентный режим и переключиться на традиционный, обновите свою конфигурацию:
{
mode = "legacy", -- Switch from "agentic" to "legacy"
-- ... your other configuration options
}
В чем разница?
Когда следует использовать традиционный режим?
Вы также можете отключить конкретные инструменты, оставив агентный режим включенным, с помощью настройки 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 Генератор 3D-моделей №1 на ИИ для создателей
|
BabelTower API Без необходимости аккаунта, используйте любую модель мгновенно
|
avante.nvim лицензирован под Лицензией Apache 2.0. Для получения дополнительной информации, пожалуйста, обратитесь к файлу LICENSE.