はじめに
プロジェクト内でコードの検索をかけるときに、Ack.vimをよく使っています。その Ack.vim で、ビジュアルモードで選択した部分を直接検索する方法を調べたので、簡単にまとめます。
課題
今まで Ack.vim でコード検索をするときは、以下のような手順を踏んで実行していました。
- 検索したい文字列をビジュアルモードで選択してヤンク
:Ack
と入力した後にヤンクした文字列をペースト- Enter キーを押して実行
しかし上記の手順を何度も繰り返していると、段々と億劫になってくるところがありました。
そのため、以下のような手順で検索をかけられると楽になるなと思い、方法を探していました。
- 検索したい文字列をビジュアルモードで選択
- ショートカットキーで選択した文字列に対して
:Ack
を実行
tl;dr
Using Ack.vim on visual selection - Stack Overflowにやりたいことそのものが紹介されていました。
以下のコマンドを .vimrc
に追記することで実現できました。
vnoremap <Leader>gy:Ack <C-r>=fnameescape(@")<CR><CR>
やっていること
上記についてそれぞれやっていることを記載します。
コマンド | 詳細 |
---|---|
vnoremap {lhs} {rhs} | ビジュアルモードのとき、キー入力 {lhs} を {rhs} に割り当てる |
<Leader>g | 特殊文字列 <Leader> と g の組み合わせ。(mapreader に何も設定していない場合、<Leader> はバックスラッシュが使用される) |
y | 選択文字列をヤンク |
:Ack | Ack コマンド実行 |
<C-r>= | このコマンド以降で実行された式の評価値を利用する |
fnameescape(@")<CR> | 選択した部分をエスケープして Enter |
<CR> | Enter |
こちらによって、検索したい箇所を選択してから<Leader>g
を入力するだけで、Ack
を実行できるようになりました。
※ @"
の部分がビジュアルモードで選択されている部分を表しているようなのですが、なぜこの文字列で表せるのかまでは調べきれませんでした。。
おわりに
普段良く使うコマンドのキー入力を減らすことができると、より負担が軽くなることを感じました。他にも何度も使っているコマンドを見つけたら、より便利になる方法を探してみたいと思います。