もた日記

くだらないことを真面目にやる

Vimメモ : ag.vimでVimからag(the_silver_searcher)を利用して検索

ag(the_silver_searcher)


github.com

agとはgrepackのようにパターン検索できるコマンドで、他のコマンドに比べると検索が速いのが利点。
例えば、下記コマンドだとカレントディレクトリ以下から再帰的にgemというパターン(大文字小文字無視)を検索できる。

$ ag -i gem .

f:id:wonder-wall:20160402220709p:plain

インストール方法

agのインストール方法は下記リンクを参照。

GitHub - ggreer/the_silver_searcher: A code-searching tool similar to ack, but faster.

ag.vim


github.com

このagコマンドをVimから呼べるようにしたのがag.vimプラグイン

ag.vimのインストール


NeoBundleの場合は下記行をvimrcに追加。
もちろんagを使うのでagはあらかじめインストールしておく必要がある。

NeoBundle 'rking/ag.vim'


ag.vimの使い方


基本的な使い方はVimコマンドラインで下記コマンドを入力する。

:Ag [options] {pattern} [{directory}]

例えば、

:Ag -i gem .

を入力すると検索結果が分割されたウィンドウに表示される。

f:id:wonder-wall:20160402222950p:plain

検索結果が表示されたQuickfixウィンドウで結果の行を選択してキーを押したときの挙動は以下の通り。

キー 挙動
e ファイルを開く(Quickfixを閉じる)
o ファイルを開く(Quickfixは閉じない)
go ファイルを開くが、フォーカスはQuickfix
t ファイルを新しいタブで開く
T ファイルを新しいタブで開くが、フォーカスはQuickfix
h ファイルを水平分割して開く
H ファイルを水平分割して開くが、フォーカスはQuickfix
v ファイルを垂直分割して開く
gv ファイルを垂直分割して開くが、フォーカスはQuickfix
q Quickfixを閉じる


Uniteを使う方法


ちなみにUniteをインストールしていればUnite grepagを使うこともできる(こっちの方が便利かも)。

agとUnite.vimで快適高速grep環境を手に入れる · THINKING MEGANE

を参考にvimrcに下記行を追加。
,g,cg,rキーを押せば検索、検索結果の再呼び出しなどができる。

" insert modeで開始
let g:unite_enable_start_insert = 1

" 大文字小文字を区別しない
let g:unite_enable_ignore_case = 1
let g:unite_enable_smart_case = 1

" grep検索
nnoremap <silent> ,g  :<C-u>Unite grep:. -buffer-name=search-buffer<CR>

" カーソル位置の単語をgrep検索
nnoremap <silent> ,cg :<C-u>Unite grep:. -buffer-name=search-buffer<CR><C-R><C-W>

" grep検索結果の再呼出
nnoremap <silent> ,r  :<C-u>UniteResume search-buffer<CR>

" unite grep に ag(The Silver Searcher) を使う
if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  let g:unite_source_grep_recursive_opt = ''
endif