🍖

avante.nvimでCursor likeにNeoVim開発

に公開

avante.nvimは、NeovimをCursor AI IDEのような機能を持つエディタに変える強力なプラグインです。検索結果を基に、このプラグインにおけるRAG(Retrieval-Augmented Generation)機能のセットアップ方法と活用パターンについて解説します。

avante.nvimの概要

avante.nvimでは、コードベース全体やプロジェクト内の特定ファイルの情報をAIの文脈に取り込むことができるRAG機能が利用可能です。この機能により、AIはあなたのプロジェクト固有の知識を活用してより的確な回答やコード生成を行うことができます。

インストールとセットアップ

Lazyを使用してavante.nvimをinstallします。

基本的な使い方

1. プロジェクト全体とのチャット

avante.nvimのサイドバーを開き、プロンプトに @codebase を含めることで、プロジェクト全体のコンテキストを用いたAI応答を得ることができます1。

image.png

2. 特定ファイルとのチャット

サイドバーの上からふたつ目のウィンドウでは、LLMに読み込ませたいファイルを指定できます。

  • dキーでファイルを削除
  • @キーでファイルを追加

これにより、特定のファイルのみをAIの文脈に含めることができます。

3. キーマップの活用

avante.nvimには以下のキーマップが用意されています。

  • <leader>aa - サイドバーを表示
  • <leader>ar - サイドバーを更新
  • <leader>af - サイドバーにフォーカスを切り替え
  • <leader>ae - 選択したブロックを編集

4. コード範囲に対する質問

  1. コードの一部を選択(ビジュアルモード)
  2. <leader>ae を押す
  3. AIに質問やリクエストを入力
  4. Ctrl+S で送信

AIはあなたが選択したコードの文脈を考慮して回答します。

高度な使用パターン

カスタムプロンプトの作成

プロジェクトのルートに *.{mode}.avanterules ファイルを作成することで、特定のモードに対するカスタムプロンプトを設定できます1:

  • planningモード:サイドバーで使用(.planning.avanterules
  • editingモード:選択コードブロック編集で使用(.editing.avanterules
  • suggestingモード:自動提案で使用(.suggesting.avanterules

プラグインの連携

img-clip.nvimと統合することで、画像の貼り付けなど高度な機能も利用可能です。

@について

コマンド入力画面で使える@コマンドがいくつか用意されています。

コマンド 役割 使用方法 備考
@codebase プロジェクト全体をAIに読み込ませる チャットプロンプトに**@codebase プロジェクトのアーキテクチャを説明して**などと入力 プロジェクトサイズによっては処理に時間がかかり、ハングすることがある
@file 特定のファイルをAIに読み込ませる サイドバーの2番目のウィンドウで**@**キーを使ってファイルを選択 複数のファイルを選択可能で、プラグインの機能を5倍強力にしたと評価されている
@buffers 現在開いているバッファをAIに読み込ませる チャットプロンプトに**@buffers**を含める 現在のセッションで編集中のファイルに焦点を当てた質問ができる
@quickfix quickfixリストの内容をAIに読み込ませる チャットプロンプトに**@quickfix**を含める コンパイルエラーやコード上の問題についてAIに質問できる
@diagnostics LSP診断情報をAIに読み込ませる チャットプロンプトに**@diagnostics**を含める コード内のエラーや警告について詳細な説明を求められる

@codebase

@codebase このプロジェクトのファイル構造とアーキテクチャを説明してください

@file

読み込ませたいファイルを指定することができます。

@file

Kapture 2025-03-01 at 12.55.45.gif

@buffers

NeoVimで現在開いているbufferを対象にコードを実行できます。

@buffers 現在開いているファイルの中で、重複するコードはありますか?

@quickfix

@quickfix これらのエラーの原因と解決方法を教えてください

@diagnostics

editorに出ているerrorやwarningの内容を読み込ませることができます。

@diagnostics これらの警告は無視しても安全ですか?

/コマンドについて

サイドバー内に残った履歴は下記のコマンドを使うことで履歴を消すことができます。

コマンド 機能 使用場面 影響範囲
/clear チャット履歴を消去する 新しい会話を始めたい時 現在のサイドバーのチャット履歴のみ。ただし、チャットも閉じられる
/reset メモリ(コンテキスト)をリセットする 前の会話の文脈を引き継がずに質問したい時 サイドバーの「メモリー」をクリア
/new 新たに会話を始める 新しい会話を始めたい時

claude 3.7 sonnetを使う方法

最新のversionでは、claude 3.7が使えるようになっています。

optsの中のproviderをclaudeに変更し、claudeの中のmodelをclaude-3-7-sonnet-20250219に変更します。

    opts = {
        -- provideをclaudeに変更
        provider = "claude",
        openai = {
            endpoint = "https://api.openai.com/v1",
            model = "gpt-4o", -- your desired model (or use gpt-4o, etc.)
            timeout = 30000, -- timeout in milliseconds
            temperature = 0, -- adjust if needed
            max_tokens = 4096,
        },
        claude = {
            endpoint = "https://api.anthropic.com",
            -- 下記を追加
            model = "claude-3-7-sonnet-20250219",
            temperature = 0,
            max_tokens = 4096,
        },
    },

Cursor Planning Modeを有効化する方法

    opts = {
        -- providerをclaudeに変更
        provider = "claude",
        behaviour = {
            enable_cursor_planning_mode = true, -- Whether to enable Cursor Planning Mode. Default to false.
        },
        vendors = {
	        --- ... existing vendors
	        groq = { -- define groq provider
	            __inherited_from = "openai",
	            api_key_name = "GROQ_API_KEY",
	            endpoint = "https://api.groq.com/openai/v1/",
	            model = "llama-3.3-70b-versatile",
	            max_tokens = 32768, -- remember to increase this value, otherwise it will stop generating halfway
	        },
			 },
    },

Search Engineを追加して、最新の情報からコードを提案してもらう方法

下記のSearch Engineが利用できるようです。

web_search_engine = {
  provider = "tavily", -- tavily, serpapi, searchapi, google or kagi
}

tavilyを使用する場合は、下記の環境変数の設定が必要です。

TAVILY_API_KEY=foobar

環境変数が読み込まれているかどうかは下記で確認しましょう。

 echo $TAVILY_API_KEY

RAGを使用する方法

下記は公式からそのまま持ってきたものです。

rag_service = {
    enabled = true, -- Enables the RAG service
    host_mount = os.getenv("HOME"), -- Host mount path for the rag service
    provider = "openai", -- The provider to use for RAG service (e.g. openai or ollama)
    llm_model = "", -- The LLM model to use for RAG service
    embed_model = "", -- The embedding model to use for RAG service
    endpoint = "https://api.openai.com/v1", -- The API endpoint for RAG service
},

使用例

自分のNeoVimのproject内にREADMEがなかったので更新してもらいましょう。

create-file

下記のようなコードが生成できました。gitで差分が出たファイルに関してREADMEを書くということもできるため、運用の効率化ができそうです。

# Neovim Configuration

個人用のNeovim設定ファイル集です。プラグイン管理に[lazy.nvim](https://github.com/folke/lazy.nvim)を使用し、LSP、補完、シンタックスハイライト、Git統合など多数の機能を備えています。

## 特徴

- `;` をリーダーキーとして使用
- [lazy.nvim](https://github.com/folke/lazy.nvim)によるプラグイン管理
- LSPサポート([lspsaga](https://github.com/nvimdev/lspsaga.nvim)など)
- [Telescope](https://github.com/nvim-telescope/telescope.nvim)によるファジーファインダー
- [Treesitter](https://github.com/nvim-treesitter/nvim-treesitter)によるシンタックスハイライト
- [BufferLine](https://github.com/akinsho/bufferline.nvim)によるタブ管理
- Git統合([gitsigns](https://github.com/lewis6991/gitsigns.nvim)[git-blame](https://github.com/f-person/git-blame.nvim)など)
- Go言語サポート
- カラースキーム設定
- その他多数のQOL改善

## キーマップ

主要なキーマップは以下の通りです:

### 基本操作
- `;d` - HopWord(単語間ジャンプ)
- `;q` - 終了
- `;Q` - 強制終了
- `;w` - 保存
- `;wq` - 保存して終了

### バッファ操作
- `;ls` - バッファ一覧
- `;bd` - バッファ削除
- `<C-l>` - 次のバッファへ
- `<C-h>` - 前のバッファへ
- `;1-9` - 特定のバッファへ移動

### ファイル操作
- `;p` - ファイル検索(Telescope)
- `;ff` - テキスト検索(Telescope)
- `;F` - ファイルエクスプローラー(NvimTree)

### LSP
- `;s` - コードフォーマット
- `;kk` - ホバードキュメント
- `;kf` - 定義へ移動
- `;kt` - 型定義へ移動
- `;ka` - コードアクション
- `;kr` - リネーム

### Git
- `gf` - ファイルURLを開く
- `gc` - コミットURLを開く
- `gh` - 前のハンクへ
- `gl` - 次のハンクへ
- `gd` - diff表示
- `co` - コンフリクト解決(自分の変更を選択)
- `ct` - コンフリクト解決(相手の変更を選択)

### その他
- `;L` - Lazy(プラグイン管理)
- `;M` - Mason(LSPマネージャー)
- `;n` - Trouble(問題一覧)

## インストール方法

1. このリポジトリをクローン:

   git clone https://github.com/yourusername/dotfiles.git ~/.config/nvim

2. Neovimを起動すると、lazy.nvimが自動的にインストールされ、設定されたプラグインがダウンロードされます。

## 必要条件

- Neovim 0.9.0以上
- Git
- [ripgrep](https://github.com/BurntSushi/ripgrep)(Telescopeの全文検索用)
- 各言語のLSP(自動的にインストールされます)

## カスタマイズ

- `lua/core/keymaps.lua` - キーマップの設定
- `lua/core/options.lua` - Neovimの基本設定
- `lua/plugins/` - 各プラグインの設定
- `lua/core/colorscheme.lua` - カラースキームの設定

## ライセンス

MIT

生成途中でrate limitに引っかかった場合は、時間を置いて再fetchしてくれます。まだ、自分も検証中ですが、現在のavante.nvimでも下記のようなusecaseには対応が可能に見えます。NeoVimのAIエージェント化の最有力候補と言えるでしょう。

  • shell実行でエラーの発生する箇所を特定し、再帰的にファイルの修正を繰り返す
  • gitの差分を検知して、READMEを更新する
  • 対象の機能のファイルを読み込み、各テストケースを網羅した単体テストを自動的に生成する

参考

GitHubで編集を提案

Discussion