2025-07-27 21:53:06

Vim で Claude Code するときの微工夫

最近は Claude Code (CLI のやつ) をだいぶ使っている。
Vim のターミナルで Claude Code を動かすとして、いくらか便利に使うための TIPS 載せておく。

前提として、不便を感じていたところ

Claude Code に「ファイルの何行目を見てくれ」みたいに指示したいとき、便利なやり方が分からなくて困っていた。
いつも別のターミナルを開いて find だの grep だの cat だのして、そんでだいたい場所を特定したら Claude Code に戻って「@hogehoge.go の Ln-Lm を見てくれ」と打ち込む感じ。おお、なんとみっともない非効率なやり方かパン粉よ

別のターミナルがスッと開ける環境ならまだ良くて、ssh しているときなんかは他のターミナルをスッと起動することもできないときがあり、いったん Claude Code を落としてから find だの grep だの… とやって、あたりをつけたらもう一回 Claude Code を起動してさっきあたりをつけた場所を打ち込む、という手順を踏むこともあった。おお、なんとみっともない非効率なやり方かパン粉よ

tmux を使えばだいぶマシになるという話もあるが、自分はいままで tmux を使ってこなかったこともあり、つい tmux の起動を忘れがちだったりするのもある。

Vim のターミナルから Claude Code を使う

で、自分は普段は Vim を使っている。プロジェクトのルートディレクトリで Vim を開き、あとは NerdTree を使ったり silversearcher-ag と fzf の連携でファイルを探したりしている。ファイルを探すのも grep するのも Vim なのである。

ということで、Vim と Claude Code をうまく連携できると良いのだけど、いくらかやり方を模索してみたところ割と自分に合いそうなやり方を見つけたので TIPS として記録しておく。やりたいことは以下であった。

  • yank した内容を Claude Code に貼り付けたい
  • ビジュアルブロックで指定した行の場所 (内容ではない) を、ファイル名を添えて Claude Code に貼り付けたい
    • @{ファイル名}:Ln-Lm みたいなフォーマットで Claude Code に貼り付けたい

Claude Code は Vim のターミナルで動かす想定。

まず先に困りごと: Vim のターミナルで Claude Code を起動したらなんか見た目が変だったし動きも変だった

自分のところの Vim のターミナルで Claude Code を動かすと、こんなふうになっていた。動きもなんか変
Image

これは ambiwidth=double という設定が悪さをしていたことが分かった。ambiwidth=single にしてあげるとキレイな見た目になるしちゃんと動く。しかし ambiwidth=double を捨てて俺達日本人が生きていけるのかは分からない。

yank したものを Claude Code に貼り付ける

これは Claude Code に貼り付けるというよりは「yank したものをターミナルに貼り付けるにはどうすれば」という話である。
これは yank したあと、ターミナル側のペインで入力モードに入ったのち、「Ctrl-w “"」と入力すれば yank したものが貼り付けされることが分かった。なんか Vim の基本中の基本の操作っぽい雰囲気がするのだが自分は知らなかった……。10年以上 Vim 触っているのに……。

ターミナル上で Claude Code を起動した状態で同様の操作をすれば、Claude Code の入力欄に yank したものがペーストされていくという寸法。具体的なコード片を Claude Code に貼り付けたいときに便利。

ビジュアルブロックで指定した場所 (ファイル名と行数) を Claude Code に貼り付ける

具体的なコードを貼り付けるんじゃなくて、ファイルパスとその中のどのへんっていうのを指示したいときの話。
これは少しだけ工夫が必要だったが、しかしワンライナーで済ますことができた。
ビジュアルブロックで行を選択した状態で、以下のコマンドを入力する。

:let @" = '@' . expand('%') . ':L' . line("'<") . '-L' . line("'>")<CR>

" に突っ込んでいるあたりはもっと便利にできるかもしれない。しかしこれをやると「@{ファイル名}:Ln-Lm」というフォーマットの文字列が yank された状態になる。ちなみにファイル名は相対パスで取得される。
そのまま Claude Code 側にいって「Ctrl-w “"」とすれば、件の文字列が Claude Code に貼り付けられるという寸法である。

自分は vimrc に以下のように書いておいた。leader を , に設定しているので、,y とやると先述のコマンドが動いてビジュアルブロックで指定した部分のファイル情報が yank された状態になる。

vnoremap <leader>y :<C-u>let @" = '@' . expand('%') . ':L' . line("'<") . '-L' . line("'>")<CR>

シンプルだが便利だぞ

これで vim で高速にファイルを探索しながら、所望の場所を特定したら Claude Code にペッと貼り付けるというのを快適に行うことができそうである。

世の中の Claude Code を便利に使うための Vim Plugin (概ねは nvim 用のもののようだが……) はもっともっと便利機能がありそうだが、自分の需要という点ではいったんここまで。もっと便利にしたくなったら Vim Plugin を書く (Claude Code に書いてもらう) のもいいかもしれないな!

Share