やりたかったこと
herdr でNvimとClaude Codeを並べて作業しているとき、「このファイルのこの部分見て」をNvimから直接エージェントのプロンプトに送りたかった。
毎回ファイルパスをコピーして貼り付けて...とやるのが地味に面倒だったので、Neovimプラグインとして作ってみた。
作ったもの
同一herdrワークスペース内のAIエージェントに対して、Nvimからファイル参照やプロンプトを送信するプラグイン。
できること
| コマンド | 動作 |
|---|---|
:HerdrSendSelection |
選択範囲を @path#L1-5 としてプロンプト欄に入力 |
:HerdrSendBuffer |
現在のファイルを @path としてプロンプト欄に入力 |
:HerdrSendPrompt |
自由入力したテキストをそのままサブミット |
Selection/Bufferはプロンプト欄にテキストを入れるだけ(サブミットしない)ので、追加で指示を書いてから送信できる。
エージェントが同一ワークスペースにいなければ、自動でペインを分割してエージェントを起動し、ready後に送信する。
仕組み
herdr CLIを内部で呼んでいるだけ。
- 環境変数
$HERDR_WORKSPACE_IDで自分のワークスペースを特定 -
herdr agent listで同一ワークスペース内のエージェントを取得(自分自身は除外) - エージェントが0件なら
herdr pane split+herdr agent startで自動起動し、ready待機 - エージェントが1つなら自動、複数なら
vim.ui.selectで選択 -
herdr pane send-textでプロンプト欄にテキスト入力 orherdr agent promptでサブミット
インストール
lazy.nvim の例:
{
"rytkmt/herdr-send.nvim",
config = function()
require("herdr-send").setup({
agent_cmd = "claude", -- 起動するエージェント
split_direction = "right", -- 分割方向: "right" or "down"
split_ratio = 0.5, -- 分割比率
})
vim.keymap.set("v", "<leader>hs", "<cmd>HerdrSendSelection<cr>")
vim.keymap.set("n", "<leader>hb", "<cmd>HerdrSendBuffer<cr>")
vim.keymap.set("n", "<leader>hp", "<cmd>HerdrSendPrompt<cr>")
end,
}
対応エージェント
@path ファイル参照構文をサポートしているのは以下のエージェント:
- Claude Code
- Gemini CLI
herdr対応エージェント(Codex, Copilot, Devin, Kimi 等)にもテキスト送信自体は動作するが、@ 記法が認識されるかは各エージェントの仕様次第。
要件
- Neovim >= 0.10
- herdr >= 0.7.0
- Nvimがherdrペイン内で動いていること
所感
herdr CLIが agent list でJSONを返してくれるし pane send-text でサブミットなしのテキスト入力ができるので、実装自体は数十行で済んだ。エージェントがいなければ自動起動する仕組みも pane split → agent start → agent wait の3ステップで実現できた。Nvim + AIエージェントの並行作業が楽になった。