目次
- 目次
- はじめに
- grep.vimのインストール
- Windowsでgrep.vimを使う場合
- grep.vimの使い方
- より快適にgrepするためのvimrc設定
- jvgrepを使う
- 参考資料
- MyEnigma Supporters
はじめに
自分はvimが大好きですが、
デフォルトで一番使いづらいなと思っていたのがgrep機能(vimgrep)です。
vimgrepはvimのデフォルト機能に入っているので便利ですが、
検索が非常に遅いため、かなりイライラしてしまいました。
そこで外部grepとして、
外部のツールを連携させることもできますが、
検索フォーマットを覚えるのが面倒で、
あまり使いこなせていませんでした。
そこで下記で説明するgrep.vimというプラグインを
導入した所、非常に便利で高速に
ファイル名検索やgrepができるようになったので
紹介したいと思います。
grep.vimのインストール
grep.vimは下記のGitHubリポジトリで公開されています。
英語ですがこちらがマニュアルです。
ですのでインストールは上記のファイルをDLしてパスを通すか、
Neobundleを使っている場合は、下記でインストールできます。
NeoBundle 'vim-scripts/grep.vim'
Windowsでgrep.vimを使う場合
grep.vimは裏でUnixツールのgrepやfindを使っています。
UnixやMacでは、元々それらのツールが付いているので問題無いですが、
windowsの場合は下記のリンク先からインストールする必要があります。
自分は、Git For Windowsをインストールした時に付いてきた、
Git BashののUnixユーティリティのexeファイルがあったので
それらを使おうと思ったのですが、
WindwosのC:Program Filesのスペースのせいで
パスが上手く認識できなかったようなので、
下記のコマンドでシンボリックリンクを貼りました。
mklink /d "C:\Gitbin" "C:\Program Files\Git\bin"
そして下記のようにvimrcに設定を追記しました。
elseif has("win32") " Windows環境用のコード "grep.vim用にGitbashのgrepにパスを通す" "Program filesのディレクトリ名の間のスペースによって "おかしい挙動をしたため、エイリアスを使った" let Grep_Path = 'C:\Gitbin\grep.exe' let Grep_Xargs_Path = 'C:\Gitbin\xargs.exe' let Grep_Find_Path = 'C:\Gitbin\find.exe' let Grep_Shell_Quote_Char = '"' endif
grep.vimの使い方
色々機能がありますが、
自分がメインで使っている機能だけを説明します。
拡張子やディレクトリ設定して再帰的にgrepする
自分が一番使っている機能は再帰的にgrepする
:Rgrepです。
検索したい文字列の上にカーソルが乗った状態で、
:Rgrepと入力すると、
下記のように、カーソル下の単語が検索文字として入力されているはずです。
検索文字がその文字でいい場合はOKを押します。
また以前の検索履歴を上下キーでたどることができるので、
以前検索したものを再度検索することも簡単です。
すると、続いて検索ディレクトリの設定になります。
デフォルトでは、今のカレントディレクトリが入力されています。
最後に検索するファイルパターンの設定になります。
すでに検索するファイルの拡張子などがわかっている場合は、
ちゃんと指定しておくと、検索が高速になります。
下記は.pyファイルを検索する場合です。
すると、検索結果がQuickfixとして表示されます。
あとは開きたいファイルの上でEnterを押せば、
そのファイルを開くことができます。
ちなみに<C-w>Enterを押すと、
現在のファイルを残したままで
ファイルを開くことができます。
また自分の場合、下記をvimrcに追記し、
grとコマンドすると:Rgrepが起動するようにしています。
nnoremap <expr> gr ':Rgrep<CR>'
ファイル名検索
grepではなく、あるファイル名を指定して、
そのファイル名のファイルのパスを高速で検索する場合にも、
このgrep.vimを使うと便利です。
まず、:Rgrepを起動し、
検索文字を*にします。
続いて、再帰検索のディレクトリを決定します。
最後にファイル名の指定で、
検索したいファイル名を入力します。
すると、入力したファイル名のファイルが
Quickfixで表示されます。
ファイル名で検索する時に便利です。
より快適にgrepするためのvimrc設定
コマンドラインからのgrepも同じですが、
あらかじめ検索するファイルを間引いておくと
より一層検索が早くなります。
自分の場合、
下記の設定をvimrcに追記することで、
.svn .gitフォルダを検索対象外にしたり、
バイナルファイルやバックアップファイルを
検索しないようにしています。
let Grep_Skip_Dirs = '.svn .git' "無視するディレクトリ let Grep_Default_Options = '-I' "バイナルファイルがgrepしない let Grep_Skip_Files = '*.bak *~' "バックアップファイルを無視する
jvgrepを使う
上記の記事を書いた頃は、
Linux,Macのデフォルトのgrepと、
WindowsではGit for windowsのgrepを使っていましたが、
日本語のgrepなどをしたくなったので、
今月のsoftware designで紹介されていた
- 出版社/メーカー: 技術評論社
- 発売日: 2016/04/18
- メディア: 雑誌
- この商品を含むブログ (2件) を見る
jvgrepを導入しました。
jvgrepはgo製のツールで、
日本語のgrepが簡単にできたり、
検索が高速であることが特徴のようです。
使い方としては、
下記の方法でjvgrepをインストールして、
あとは下記の.vimrc設定をすることで、
jvgrepが利用できる時は、
grepがjvgrepに置き換えられます。
if executable('jvgrep') set grepprg=jvgrep endif
Macでのインストール
brewで一発です。
$ brew install jvgrep
Ubuntuでのインストール
goをインストールして
ソースからコンパイルしてもよかったですが、
goのインストールが面倒だったので、
自分は下記のリンクから
Linux用バイナリをDLして、
/usr/binにおいて置いてしまいました。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。