プロンプトを普段のエディタで書けるツールeditpromptの使い方
この記事はVim駅伝の2025年7月16日の記事です。
前回(2025年7月14日)uma-chanさんのVimへの初コントリビューションの経緯と学び – uma-chan’s pageでした。
Claude Codeを使っているときの頭の中。
「改行。あ!送信されちゃった……」
「今はclaudeだから ctrl+jで改行、よし改行できた。で、……」
改行のコンテキストスイッチで思考を使うのってもったいないですよね。どうせなら慣れ親しんだエディタで思考の速度で入力したいものです。
他のCLIでも同じようなストレスが結構あります。これを解決できるツールeditpromptを紹介します。筆者製です。Neovimから快適に入力したいので作りました。
editpromptとは
editpromptはプロンプトを好きなエディタから入力できるツールです。zshのedit-command-lineみたいなやつです。
動画の例はこんな流れです。
- tmuxのキーバインドでeditpromptを実行
- Neovimでプロンプトを書く
- 保存して終了するとtmuxのペインが閉じ、Claude Codeにプロンプトが入力される
例ではtmuxですが、weztermでも自動送信に対応しています。tmuxとwezterm以外の環境でも クリップボードにコピーされる ので使えます。
設定で エディタを開きっぱなし にもできます。
メリット
慣れ親しんだエディタを使ってプロンプトを入力できるため、改行に対する認知負荷が無くなります。
dotfiles盆栽でカスタマイズしまくったエディタを使うことで、補完やスニペット、プラグイン、シンタックスハイライトなど使い放題です。
最近は減りましたが、日本語入力が安定しないCLIでも重宝します。
インストール
npmパッケージとして公開しているため、次のようなコマンドでインストールできます。
npm install -g editpromptちょっと試したいだけならnpxで実行できます。
npx editpromptデフォルトでは環境変数$EDITORのコマンドをエディタとして開きます。
tmuxやweztermと使おう
tmuxやweztermの場合、READMEに記載しているようにキーバインドを設定することで「ペインへ自動送信」できます。筆者はtmuxで次のように設定してます。
bind -n M-q run-shell '\ editprompt --resume --target-pane #{pane_id} || \ tmux split-window -v -l 10 -c "#{pane_current_path}" \ "editprompt --editor nvim --always-copy --target-pane #{pane_id}"'Alt+qを押すと次のような動作になります。
- 初回:下に20行分の高さでNeovimが開く
- 2回目以降:双方向にフォーカス
- エディタのペインなら送信先ペインにフォーカス
- 送信先ペインならエディタのペインにフォーカス
エディタを閉じると自動的にペインも閉じます。書いたプロンプトは指定されたペインに入力されます。
tmux・wezterm以外の場合
tmuxあるいはweztermでない場合は単純にeditpromptを実行してください。
editpromptエディタを閉じると書いたプロンプトがクリップボードに入ります。後は貼り付けるだけです。
エディタの指定
前述のとおり、エディタを引数--editor・-eで指定できます。
editprompt --editor vimプロンプト以外でも使える
例ではClaude Codeを上げましたが、任意の入力に対応しています。Codex、GeminiなどAIエージェントの他、別にAI関係なくCLIの入力に使えます。
エディタを開きっぱなしにできる
次のようにeditprompt -- "foo"をエディタ内から実行すれば、エディタを開きっぱなしにしつつプロンプトを入力できます。
if vim.env.EDITPROMPT then vim.keymap.set("n", "<Space>x", function() vim.cmd("update") local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false) local content = table.concat(lines, "\n")
vim.system( { "editprompt", "--", content }, { text = true }, function(obj) vim.schedule(function() if obj.code == 0 then -- バッファを空にする vim.api.nvim_buf_set_lines(0, 0, -1, false, {}) vim.cmd("silent write") else vim.notify("editprompt failed: " .. (obj.stderr or "unknown error"), vim.log.levels.ERROR) end end) end ) end, { silent = true, desc = "Send buffer content to editprompt" })end合わせて使うと便利なNeovimプラグイン
補完・スニペット・Tree-sitterは入れている人が多いと思うので割愛。
- render-markdown.nvim
- 別の記事で解説
- Tree-sitterだけでも見やすいけど、リンクとか引用を書く時にもっと見やすくなる
- emmet-vim
- XML形式でプロンプトを書く時に便利
他にもあったら追記していきます。
以上、自作ツールeditpromptの紹介でした。
プロンプトの内容をファイルやissueに書いておく方法が増えましたが、「記事の構成を練る」のような対話中心の場合だと長文だったり箇条書きが多いため重宝しています。No more改行の苦しみ。