Help us understand the problem. What is going on with this article?

Ack.vim でビジュアルモードで選択した文字列から直接コード検索する

More than 1 year has passed since last update.

はじめに

プロジェクト内でコードの検索をかけるときに、Ack.vim をよく使っています。その Ack.vim で、ビジュアルモードで選択した部分を直接検索する方法を調べたので、簡単にまとめます。

課題

今まで Ack.vim でコード検索をするときは、以下のような手順を踏んで実行していました。

  • 検索したい文字列をビジュアルモードで選択してヤンク
  • :Ack と入力した後にヤンクした文字列をペースト
  • Enter キーを押して実行

しかし上記の手順を何度も繰り返していると、段々と億劫になってくるところがありました。

そのため、以下のような手順で検索をかけられると楽になるなと思い、方法を探していました。

  • 検索したい文字列をビジュアルモードで選択
  • ショートカットキーで選択した文字列に対して :Ack を実行

tl;dr

Using Ack.vim on visual selection - Stack Overflow にやりたいことそのものが紹介されていました。

以下のコマンドを .vimrc に追記することで実現できました。

vnoremap <Leader>g y: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 を実行できるようになりました。

@" の部分がビジュアルモードで選択されている部分を表しているようなのですが、なぜこの文字列で表せるのかまでは調べきれませんでした。。

おわりに

普段良く使うコマンドのキー入力を減らすことができると、より負担が軽くなることを感じました。他にも何度も使っているコマンドを見つけたら、より便利になる方法を探してみたいと思います。

参考

sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away