1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NeoVimで使ってみましたgemini-cli

Last updated at Posted at 2025-07-06

Neovim Gemini 連携ガイドとはじめに

このドキュメントは、Neovimエディタ内から直接 gemini CLIをシームレスに利用するためのカスタム設定について説明します。

と、スタートしてますがこの記事の90%はgemini-cliに書いてもらっております。
gemini-cliの導入方法は各場所にてご確認ください。

動作確認、エラー頻発しましたが、コマンドからのgemini操作で修正してもらってます。
エラー発生した際、詳細内容を伝えたほうが修正が早かったです。
トークン量の節約のためこの連携はgemini-2.5-flashを使用するようにしております。

1. 機能概要

この設定は、Neovimに以下の3つの主要な機能を追加します。

  1. 単発質問: プロンプトで質問し、結果を新しい垂直分割ウィンドウに表示します。
  2. 選択範囲への操作: ビジュアルモードで選択したコードなどについて、説明、リファクタリング、テスト作成などを依頼できます。
  3. インタラクティブチャット: 質問と回答の履歴を保持するチャットセッションを開始します。会話の文脈を記憶し、継続的な対話が可能です。

2. 前提条件

この設定が機能するためには、以下の環境が整っている必要があります。

  • Neovim: Luaによる設定が有効であること。
  • gemini CLI: gemini コマンドラインツールがシステムにインストールされており、ターミナルからパス指定なしで実行できる状態であること。

3. 設定ファイル

この機能に関する設定は、主に以下のファイルに記述されています。

  • ~/.config/nvim/lua/utils/gemini.lua: 機能の中核となるロジックを実装しています。
  • ~/.config/nvim/lua/keymaps.lua: 上記の機能を呼び出すためのキーマッピングを定義しています。

gemini.lua

keymaps.lua(追加分)
-- Gemini
local gemini = require('utils.gemini')
vim.keymap.set('n', '<leader>ga', gemini.ask, { desc = 'Ask Gemini' })
vim.keymap.set('v', '<leader>ga', gemini.visual_action, { desc = 'Ask Gemini about selection' })
vim.keymap.set('n', '<leader>gc', gemini.chat, { desc = 'Chat with Gemini' })
vim.keymap.set('n', '<leader>gq', ":GeminiChatEnd<CR>", { desc = 'Quit Gemini Chat' })
return M

4. 使い方

リーダーキーについて

このガイドではキーマップの表記に <leader> を使用します。実際のキーはあなたのNeovim設定に依存します(一般的には \<Space> が設定されています)。

4.1. 単発の質問

一時的な質問を素早く行いたい場合に使用します。

  1. ノーマルモードで <leader>ga と入力します。
  2. 画面下部に Ask Gemini: というプロンプトが表示されます。
  3. 質問を入力し、Enter キーを押します。
  4. gemini がバックグラウンドで実行され、画面の右側に新しいウィンドウが垂直分割で開き、実行結果が表示されます。

4.2. 選択範囲への操作

コードの解説を求めたり、リファクタリングを依頼したりする際に便利です。

  1. ビジュアルモードでテキスト(コードなど)を選択します。
  2. <leader>ga と入力します。
  3. 画面下部に What to do with the selection? というプロンプトが表示されます。
  4. 選択範囲に対して行いたい操作(例: explain this code, refactor, write tests for this)を入力し、Enter キーを押します。
  5. 選択範囲の内容とあなたの指示がGeminiに送信され、結果が新しいウィンドウに表示されます。

4.3. インタラクティブチャット

文脈を維持しながら対話形式で作業を進めたい場合に使用します。

  1. チャットの開始:

    • ノーマルモードで <leader>gc と入力します。
    • 画面が左右に分割され、左側に質問用、右側に回答用のウィンドウが表示されます。
  2. 質問の送信:

    • 左側の質問用ウィンドウに質問内容を入力します。
    • ノーマルモードEnter キーを押すと、質問がGeminiに送信されます。
  3. 回答の確認:

    • 右側の回答用ウィンドウに、Geminiからの回答がタイムスタンプ付きで追記されます。
    • 回答が完了すると、カーソルは自動的に左側の質問用ウィンドウに戻り、インサートモードになるため、すぐに次の質問を入力できます。
  4. チャットの終了:

    • ノーマルモードで <leader>gq と入力します。
    • チャットセッションが終了し、質問用・回答用の両方のウィンドウが閉じます。
  5. 履歴の永続化:

    • チャットの履歴は ~/.cache/gemini_chat/ ディレクトリ内の questions.mdanswers.md に自動で保存されます。
    • 次回チャットセッションを開始した際、過去の履歴が文脈として読み込まれます。

5. キーマップ一覧

モード キーマップ 機能 呼び出し先
Normal <leader>ga Geminiに単発の質問をする require('utils.gemini').ask
Visual <leader>ga 選択範囲についてGeminiに質問する require('utils.gemini').visual_action
Normal <leader>gc Geminiとのチャットセッションを開始する require('utils.gemini').chat
Normal <leader>gq Geminiチャットを終了する :GeminiChatEnd<CR>
Normal <CR> (チャット中) 質問を送信する require('utils.gemini')._send_question

これで、NeovimからシームレスにGeminiの力を借りることができるようになりました。

6.おわりに

とりあえず、このスクリプトはchromebookとAndroidのtermuxにて動作してますが、アップデートするたびに動かなくなる気がします。自分だけの力じゃこんなもん出来ないなぁと感じました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?