avante.nvimのメモ

avante.neovimのメモ

2025年はAI IDEが流行っている。VSCodeのAI IDEは有名だが、neovimでもAI IDEを行うことができる。そのために、avante.neovimを使う。

インストール

avante.nvimのオフィシャルサイトの手順に従ってインストールする。

ここにあるように設定を入れる

私はrafiのnvim設定を用いているので ~/.config/nvim/lua/plugins/avante.lua を作成して、冒頭に return を追記して動作した

現在は ~/.config/nvim/lua/plugins/avante.lua に設定を置いている。 provider は gemini、input provider は snacks にしている。

Avante は Lua 部分だけでなく avante_templatesavante_tokenizersavante_repo_mapavante_html2md などの native module も使う。 そのため、プラグインがロードできるだけでは十分ではなく、build/*.so があるかまで確認する。

make -C ~/.local/share/nvim/lazy/avante.nvim

2026-05-29 に確認した時点では、build 前は require("avante") は通るが native module が読めない状態だった。 make 実行後、次が作られた。

~/.local/share/nvim/lazy/avante.nvim/build/avante_html2md.so
~/.local/share/nvim/lazy/avante.nvim/build/avante_repo_map.so
~/.local/share/nvim/lazy/avante.nvim/build/avante_templates.so
~/.local/share/nvim/lazy/avante.nvim/build/avante_tokenizers.so

テスト

Neovim の plugin 設定は、実 UI を開く前に headless で最低限テストする。

nvim --headless '+lua local lazy=require("lazy"); local C=require("lazy.core.config"); local p=C.plugins["avante.nvim"]; print("avante_spec=" .. tostring(p ~= nil)); if p then print("avante_enabled=" .. tostring(p.enabled ~= false)); print("avante_lazy=" .. tostring(p.lazy)); end; lazy.load({ plugins = { "avante.nvim" }, wait = true }); local ok, avante = pcall(require, "avante"); print("avante_require=" .. tostring(ok)); if not ok then print("avante_error=" .. tostring(avante)); end; print("AvanteAsk_cmd=" .. tostring(vim.fn.exists(":AvanteAsk"))); local opts = LazyVim.opts("avante.nvim"); print("avante_provider=" .. tostring(opts.provider)); print("avante_input_provider=" .. tostring(opts.input and opts.input.provider)); vim.cmd("qa")'

期待値は次の通り。

avante_spec=true
avante_enabled=true
avante_lazy=true
avante_require=true
AvanteAsk_cmd=2
avante_provider=gemini
avante_input_provider=snacks

native module まで確認する場合は、headless では VeryLazy 相当の autocmd を発火させてから確認する。

nvim --headless '+lua require("lazy").load({ plugins = { "avante.nvim" }, wait = true }); vim.api.nvim_exec_autocmds("User", { pattern = "VeryLazy" }); for _,name in ipairs({"avante_tokenizers","avante_templates","avante_repo_map","avante_html2md"}) do local ok, mod = pcall(require, name); print(name .. " ok=" .. tostring(ok) .. " type=" .. type(mod)); end; print("templates_available=" .. tostring(require("avante.path").available())); vim.cmd("qa")'

期待値は次の通り。

avante_tokenizers ok=true type=table
avante_templates ok=true type=table
avante_repo_map ok=true type=table
avante_html2md ok=true type=table
templates_available=true

health check も確認する。

nvim --headless '+Lazy! load avante.nvim' '+checkhealth avante' '+silent write! /tmp/nvim-avante-health.txt' '+qa'

2026-05-29 時点では、plenary.nvimnui.nvim、icons plugin、snacks.nvim input provider、TreeSitter parser/highlighter は OK だった。

使い方

起動 : <leader> + a + a でAIが起動する。AIが起動すると、AIがコードを書いてくれる。

コマンド

コマンド説明
:AvanteAsk [question] [position]コードについてAIに質問します。オプションのpositionはウィンドウの位置を設定し、askは直接質問モードを有効/無効にします。:AvanteAsk position=right Refactor this code here
:AvanteBuildプロジェクトの依存関係をビルドします。
:AvanteChatコードベースについてAIとのチャットセッションを開始します。デフォルトはask=falseです。
:AvanteChatNew新しいチャットセッションを開始します。現在のチャットはチャットセッションセレクターで再度開くことができます。
:AvanteHistory以前のチャットセッションのピッカーを開きます。
:AvanteClear現在のチャットセッションのチャット履歴をクリアします。
:AvanteEdit選択したコードブロックを編集します。
:AvanteFocusサイドバーとのフォーカスを切り替えます。
:AvanteRefreshすべてのAvanteウィンドウを更新します。
:AvanteStop現在のAIリクエストを停止します。
:AvanteSwitchProviderAIプロバイダー(例: openai)を切り替えます。
:AvanteShowRepoMapプロジェクトの構造のリポジトリマップを表示します。
:AvanteToggleAvanteサイドバーを切り替えます。
:AvanteModelsモデルリストを表示します。
:AvanteSwitchSelectorProviderAvanteセレクタープロバイダー(例: native, telescope, fzf_lua, mini_pick, snacks)を切り替えます。