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 に設定を置いている。 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 実行後、次が作られた(build/ ではなく lua/ 配下に生成される)。

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

CARGO_HOME が書き込み不可のシステムディレクトリに設定されている場合、make が権限エラーで失敗する。 その場合は環境変数を上書きして実行する。

CARGO_HOME=~/.cargo make -C ~/.local/share/nvim/lazy/avante.nvim

lazy.nvim の build にも同様に指定しておくと、:Lazy build avante.nvim 時も同じ設定で動く。

build = function()
  if vim.fn.has("win32") == 1 then
    return "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false"
  else
    return "CARGO_HOME=~/.cargo make"
  end
end,

AWS Bedrock をプロバイダーに使う

avante.nvim は AWS Bedrock をプロバイダーとして使える。

認証方法

Bedrock プロバイダーは以下の認証方法に対応している。

方法設定
環境変数BEDROCK_KEYS="aws_access_key_id,aws_secret_access_key,aws_region"
AWS デフォルトチェーン~/.aws/credentials、IAMロール、SSO など
Bearer TokenAWS_BEARER_TOKEN_BEDROCK 環境変数

AWS SSO を使う場合は aws_profile を指定する。

providers = {
  bedrock = {
    model = "jp.anthropic.claude-sonnet-4-6",
    aws_profile = "your-sso-profile",
    aws_region = "ap-northeast-1",
    timeout = 60000,
  },
},

AWS CLI が必須なので、aws コマンドが PATH に通っていることを確認する。 SSO の有効期限が切れたら aws sso login --profile your-sso-profile で再認証する。

モデル ID は推論プロファイルを使う

新しい Claude モデル(Sonnet 4 系以降)はオンデマンドの直接呼び出し(anthropic.claude-*)が使えない。 代わりにクロスリージョン推論プロファイルの ID を指定する。

# NG: オンデマンド直接呼び出し(400エラー)
anthropic.claude-sonnet-4-6

# OK: 推論プロファイル
jp.anthropic.claude-sonnet-4-6      # 日本リージョン経由
apac.anthropic.claude-sonnet-4-6    # アジアパシフィック経由
global.anthropic.claude-sonnet-4-6  # グローバル

利用可能な推論プロファイルは次のコマンドで確認できる。

aws bedrock list-inference-profiles --region ap-northeast-1 \
  --query 'inferenceProfileSummaries[].inferenceProfileId' --output table

廃止された設定

web_search_engine.provider は廃止されている。設定に含まれていると起動時に警告が出るので削除する。

-- 削除する
web_search_engine = {
  provider = "google",
},

テスト

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)を切り替えます。