Claude CodeをNeovimで使う方法 — ターミナル運用とIDE統合の現状
Neovim向けの公式IDE統合はなく、要望のissueも開いたままです。ターミナル分割、ファイルの再読込、差分確認、コミュニティプラグインの仕組みを順に見ます。
Claude CodeはNeovimの中でも普通に動きます。ただし、VS CodeやJetBrainsにある選択範囲の共有や差分ビューアのようなIDE統合は、Neovim向けには用意されていません。要望を集めたissueは2025年5月に立ち、いまも開いたままです。
そのため、Neovimでの運用は「ターミナルのひとつとして使う」か「コミュニティのプラグインでIDE統合を再現する」かの二択になります。この記事では、前者を成り立たせる設定と、後者がどういう仕組みで動いているかを順に見ます。
Neovimに公式のIDE統合はあるのか
ありません。GitHubのissue #1234「Support for other IDEs (Neovim/Emacs)」には documentation enhancement area:ide のラベルが付き、状態はopenです。起票者の要望は、IDE統合が使うツールの仕様を文書化してほしいという内容と、他のIDEへの対応計画を知りたいという内容でした。
投稿は2026年7月まで続いており、状態はopenのままです。2025年12月にはbotが「30日間動きがない」と通知し、翌2026年1月には「放置も自動クローズもしないでほしい」という投稿が付きました。
IDE統合を扱う公式ページは、VS Code向けとJetBrains向けがあります。どちらも、IDEの統合ターミナルで claude を起動すると統合機能が有効になるという構成です。Neovimの :terminal は、この「統合ターミナル」には含まれません。
VS Code・JetBrainsとNeovimの違い
VS Code・JetBrains
統合ターミナルで claude を起動すると自動で接続されます。外部のターミナルでは /ide で接続します。差分はIDEのビューアで開き、診断情報もIDEから取れます。
Neovim
:terminal や別のターミナルで claude を動かす、通常のCLI利用になります。差分と再読込はターミナルとNeovim自身の機能でまかないます。
CLIが先にある設計の背景は、AIコーディングエージェントがIDEではなくターミナルを土台にした理由で扱っています。Neovim利用者にとっては、統合がなくても主機能は欠けないという意味でもあります。
まずはターミナル分割で動かす
最小の構成は、Neovimの中で端末を開いて claude を起動することです。issueのコメントでも、まずこの方法が挙がっています。
:vsplit | terminal claude毎回打つのが面倒なら、init.lua にキーマップを足します。例えば次のような形です。
-- 縦分割でClaude Codeを開き、そのまま入力モードに入る
vim.keymap.set("n", "<leader>cc", function()
vim.cmd("vsplit")
vim.cmd("terminal claude")
vim.cmd("startinsert")
end):terminal は | を引数の一部として扱うので、:vsplit | terminal claude | startinsert のように1行でつなぐと、claude | startinsert がシェルに渡って起動に失敗します。コマンドごとに分けて呼びます。
Neovimの端末モードでは、<C-\> 以外のキーはすべて中のプログラムに送られます。ノーマルモードに戻るには <C-\><C-n> を使います。Claude Codeの操作で使う Esc、Ctrl+C、Ctrl+G も、端末モードの間はClaude Code側に届きます。
tmuxと組み合わせるとき
Neovimとは別のペインでClaude Codeを動かす人も多いでしょう。tmux上で動かす場合は、Shift+Enterの改行と通知がそのままでは効きません。~/.tmux.conf に次の3行を足し、tmux source-file ~/.tmux.conf で反映します。
# ~/.tmux.conf
set -g allow-passthrough on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'画面のちらつきやスクロール位置の飛びが気になるときは、/tui fullscreen で全画面描画に切り替えられます。設定は保存され、次回以降のセッションもこの描画で始まります。
Escが効かないという報告
issueには、Neovimの端末でClaude Codeを動かすと Esc が反応しないという投稿があります。nvim --clean でも再現するとのことで、投稿者自身が環境の問題かCLIの問題か判断できていません。スレッドには原因も解決策も出ておらず、状況は未確定です。
同じ症状に当たったら、<C-\><C-n> でノーマルモードに戻れるか、別の端末エミュレータで claude を直接動かしても再現するかを切り分けると、Neovim側かどうかを絞れます。
Claudeが書き換えたファイルをバッファに反映する
IDE統合がないNeovimで気になるのは、Claude Codeが編集したファイルがバッファに反映されるかどうかです。ここはNeovim自身が受け持ちます。
Neovimの 'autoread' オプションは既定でオンです。ファイルがNeovimの外で変更されると、自動で読み直します。OSのファイル監視イベントを使うため、フォーカスが戻るのを待たずにバッファが更新されます。
読み込まれない場合は、:checktime で外部変更のあるバッファを確認できます。変更中のバッファがあるとき、Neovimは二重に別バージョンを持たないよう警告します。Claude Codeの作業中にそのファイルを自分でも書き換えない運用が、衝突を避ける一番の近道です。
:checktime差分を確認する
VS CodeやJetBrainsでは、Claudeの提案がIDEの差分ビューアに開きます。この挙動は diffTool という設定で、auto(IDEで開く)と terminal(ターミナルに留める)を選べます。ただし、この設定が /config に現れるのはVS CodeかJetBrainsに接続している間だけです。
Neovimでは接続先のIDEがないため、差分はターミナルに表示されます。編集後に確認する方法は2つあります。
- Claude Codeの対話画面で、変更内容を確認する(対話画面には変更ファイルの追加・削除行数を並べる差分ダイアログがあり、既定では
HEADとの比較になります) - Neovimから
git diffの結果や、gitプラグインの差分表示で見る
後者を選ぶと、Claudeが編集を終えるたびに autoread で反映されたバッファと差分を並べて見られます。レビューをNeovim側に寄せたい人には、こちらの運用が向いています。
範囲を渡して答えだけ受け取る
端末を開くまでもない質問は、非対話モードで済ませる手もあります。claude -p は標準入力を受け取れるので、Neovimのビジュアル選択範囲をそのまま渡せます。
:'<,'>w !claude -p "この関数が何をしているか説明して"選択範囲が標準入力としてClaudeに渡り、答えがNeovimの下部に表示されます。ファイルの書き換えは起きないので、質問と読み解きに向く使い方です。標準入力で渡せるサイズには10MBの上限があります。これを超えると、Claude Codeはエラーで終了します。
issueのコメントにも、同じ発想のユーザーコマンド(command! -range Claude <line1>,<line2>w !claude -p)が書かれています。
プロンプト入力もVimのキー操作にする
Claude Code側にも、プロンプト入力欄をVimのキー操作にするモードがあります。/config のEditor modeか、~/.claude/settings.json の editorMode で有効にします。
{
"editorMode": "vim",
"vimInsertModeRemaps": { "jj": "<Esc>" }
}vimInsertModeRemaps は、INSERTモードの2キーの並びをEscに割り当てます。上の例では jj でNORMALモードに戻れます。VimのNORMAL・VISUALの一部のモーションと演算子が使えますが、Enterは標準のVimと違い、INSERTモードでも送信になります。改行はNORMALモードの o か O、または Ctrl+J です。
長い指示を書くときは Ctrl+G が便利です。入力中のプロンプトを既定のテキストエディタで開き、保存して閉じるとプロンプトに反映されます。
コミュニティのプラグインはどう統合を再現しているか
公式の統合がないぶん、Neovim向けにはコミュニティのプラグインがあります。issueのコメントで名前が挙がっているのは次の2つです。
| プラグイン | コメントでの説明 |
|---|---|
coder/claudecode.nvim | コメントでの説明VS Code拡張のプロトコルを解析して作成。WebSocket上のMCPプロトコルと、Claudeが期待するツールをリポジトリの文書にまとめている |
greggh/claude-code.nvim | コメントでの説明別の実装。他のIDE拡張との機能差は、同リポジトリのissueで指摘されている |
どちらもスレッドに2025年6月に投稿されたもので、その後の保守状況は個々のリポジトリで確かめる必要があります。実際、2025年7月には前者について「最後のリリースから3週間たち、PRとissueがたまっている」という投稿が付いています。導入前に、最終コミットの日付と対応しているClaude Codeのバージョンを見ておくと安心です。
仕組み: ロックファイルとローカルのWebSocket
これらが成り立つ理由は、公式のIDE統合の接続方式にあります。JetBrains向けとVS Code向けのページには、組み込みのIDE用MCPサーバーの説明があります。
- サーバーはIDE側で動き、ポートは自動で割り当てられる(設定では変えられない)
- 通信は暗号化されていない
ws://で、IDEの起動ごとに新しい認証トークンが生成される - トークンはロックファイル
~/.claude/ide/<port>.lockに書かれる - CLIは接続時に、トークンを
X-Claude-Code-Ide-Authorizationヘッダに載せる CLAUDE_CONFIG_DIRを設定している場合、ロックファイルは$CLAUDE_CONFIG_DIR/ide/に置かれる
issueのコメントでも、この仕組みを再現すれば他のエディタでも統合を作れるという見方が複数出ています。Visual Studio向けの拡張を作った投稿者は、ロックファイル・ローカルのWebSocket・CLIが使うツール(差分を開く openDiff や getDiagnostics)の3点がプロトコルの要だと書いています。Visual Studioの現状はVisual Studio 2026への統合を扱った記事にまとめています。
注意点が2つあります。ひとつは、このプロトコルが第三者向けの仕様として公開されているわけではないことです。コメントにも、プロトコルの文書化が要望として出ています。もうひとつは、CLI側の更新で挙動が変わることがある点です。実際にコメントで、新しいツールが追加されて仕様の追従が必要になったという報告があります。
外部ターミナルの自動接続はNeovimに効かない
autoConnectIde や /ide は、VS CodeとJetBrains向けの接続設定です。Neovimの端末で autoConnectIde を true にしても、統合機能は生まれません。
どの運用を選ぶか
| 状況 | 向く運用 |
|---|---|
| まず試したい、依存を増やしたくない | 向く運用:terminal かtmuxの別ペインで claude を動かす |
| 編集の反映を確実にしたい | 向く運用autoread を維持し、必要に応じて :checktime |
| 質問や読み解きだけしたい | 向く運用claude -p に選択範囲を渡す |
| 選択範囲の共有や差分のエディタ表示がほしい | 向く運用コミュニティのプラグインを試す(保守状況を事前に確認) |
Emacsには、同じ仕組みを使ったパッケージの導入記事があります。Claude CodeをEmacsに統合する使い方では、設定の対応が具体的に追えます。Neovimの選択肢を考えるときの比較材料になります。
Warpのように、ターミナル側の事情で不具合が出る場合もあります。端末エミュレータを疑うときは、Warpターミナルでの不具合の切り分けが参考になります。
まとめ
Neovimで使うClaude Codeは、公式の統合がなくても主要な機能を失いません。ターミナルに置き、ファイルの反映は autoread、差分はgitまたはClaude Codeの画面で見る運用が基本です。IDE統合に近い体験がほしいときだけ、コミュニティのプラグインが選択肢に入ります。
ただしその場合は、公式が仕様を保証していないプロトコルに乗ることになります。CLIの更新のたびに動作を確かめる前提で導入するのが無理のない形です。