QFixGrep - オプション
プレビュー&絞り込み検索付きvim/gvim用日本語対応grepプラグインのオプション解説 |
| cygwin | http://www.cygwin.com |
| GNU grep |
http://gnuwin32.sourceforge.net/packages/grep.htm |
| yagrep | http://www.kt.rim.or.jp/~kbk/yagrep/ |
Windowsの場合は、cygwinのgrepか yagrepを使用してください。
GNU grepについては日本語対応の問題で推奨しません。
その他のgrepでもGNU grepとオプションが互換なら使える可能性があります。
cygwin
cygwinなどをインストールしていてコマンドプロンプトから grepが使える場合は、次のように指定します。cygwingrep.zip に必要なファイルを抽出してあるので、vimと同じディレクトリか、pathの通った場所にコピーして使用する事も出来ます。
let mygrepprg = 'grep'path を通していない場合はフルパスで指定して下さい。
let mygrepprg = 'c:/cygwin/bin/grep'cygwingrep.zipで抽出されているファイルは以下の通りです。
- grep.exe
- cygiconv-2.dll
- cygintl-2.dll
- cygintl-8.dll
- cygwin1.dll
Windows上のvim/gvimから cygwin 1.7 のgrepを使用する場合
http://d.hatena.ne.jp/fuenor/20090301/1235908129UTF-8 cygwin の grepを使用する
UTF-8 cygwin(http://www.okisoft.co.jp/esc/utf8-cygwin/download.html)や utf-8コンソールを使用する場合は 'utf-8' を指定します。UTF-8 cygwinを使用して日本語ファイル名を扱う場合は、必ず内部エンコードをutf-8にして下さい(「外部grepの問題点」)
let mygrepprg = 'grep'
let MyGrep_ShellEncoding = 'utf-8'
yagrep
yagrepを使用する場合は _vimrcに次のように設定して下さい。あとは yagrep.exe をvim/gvimと同じディレクトリに置けば動作します。
let mygrepprg = 'yagrep'vimの実行ファイルと違うディレクトリで、pathも通していない場合はフルパスで指定して下さい。
Linux(Ubuntu)の場合
Linux(Ubuntu)の設定は以下の通りです。日本語pathを扱いたい場合は、内部エンコードをUTF-8に設定してください。
「外部grepの問題点」
let mygrepprg = 'grep'
let MyGrep_ShellEncoding = 'utf-8'
cygwin/GNU grepの「ダメ文字」対策
cygwin/GNU grepの場合、文字エンコードが cp932(Shift-JIS) のファイルを、 'ー'、'ソ'、'表'などのいわゆる「ダメ文字」を含む正規表現でgrepできません。「ダメ文字」を使用していても、正規表現を使わない検索(fgrep)なら可能です。
対処として、「ダメ文字」を"(..)"の正規表現で置き換えます。
検索対象が'cp932'でないか、FGrep(固定文字列検索)、VGrep(vimgrep)なら自動的に無効になります。
cp932のファイルで文字列 "正規表現" を grepする場合、'表'が含まれているので検索されません。
"正規表現" → "正規(..)現" と置き換えてからgrepします。
"正規表現" → "正規(..)現" と置き換えてからgrepします。
デフォルト(MyGrep_Damemoji = 2)で行われている「ダメ文字」対策には次のような副作用があります。
たとえば"ソーメン" を Grepすると "ソ" と "ー "が「ダメ文字」のため "ラーメン" や "タンメン" 、 "イケメン" などメンが付けば何でも引っかかるようになります。
FGrepで検索した場合や、対象が cp932 でない時には問題有りません。
余計にヒットした物については、結果表示後に拡張Quickfix の s コマンドで絞り込みすると便利かと思います。
検索レジスタにgrepした文字列が設定されているので、<C-r>/で検索文字列を貼り付けて絞り込みできます。
日本語でgrepが必要になるケースは少ないと思うので、日本語の場合は通常 FGrepを使用する方が良いかと思います。
QFixGrep で使用する場合は ,f での検索がそれに当たります。
基本的に元のgrepが日本語対応していないので、どうしても結果がおかしいときには VGrep(vimgrep)を使用する方が良いでしょう。
「ダメ文字」対策のオプション
| MyGrep_Damemoji = 0 | 「ダメ文字」の置き換えをしない。 |
| MyGrep_Damemoji = 1 | 2byte目が0x5cの「ダメ文字」を置き換える。 |
| MyGrep_Damemoji = 2 | ほぼ全ての「ダメ文字」を置き換える。 |
| MyGrep_Damemoji = 3 |
2byte目が0x5cと0x7cの「ダメ文字」を置き換える。 |
| MyGrep_DamemojiReplaceReg |
「ダメ文字」を置き換える正規表現 |
| MyGrep_DamemojiReplace |
更に追加指定したい「ダメ文字」の正規表現 |
具体的なダメ文字の種類については「Shift_JIS(cp932)の「ダメ文字」」を参照して下さい。
WindowsのGNU grepでは
let MyGrep_DamemojiReplaceReg = '(.*)'にしなければ動かないバージョンもあるようです。
yagrepの「ダメ文字」対策
yagrepは日本語対応という事になっていますが、最新版(2009/03/31)ではダメ文字は検索できません。またutf-8でマルチバイトオプションを設定すると検索できなくなる文字などもあります。
この問題は認識されていて修正の予定はあるようですが、上記バージョンではマルチバイトオプションは使用せずに MyGrep_yagrep_opt = 0で使用して下さい。
各種オプションについても、出来るだけ使用しない方が問題が起きにくいようです。
まずQFixGrepの「ダメ文字」対策について確認しておいて下さい。
「cygwin/GNU grepの「ダメ文字」対策」
yagrepにはマルチバイトオプションがあり、文字コードに適した処理を行えます。
また日本語対応されていて cp932の「ダメ文字」も検索できます。
MyGrep_yagrep_opt でマルチバイトオプションとダメ文字対策を設定できます。
"yagrepのマルチバイトオプション
let MyGrep_yagrep_opt = 0
| MyGrep_yagrep_opt = 0 | マルチバイトオプションを使用しない。 ダメ文字対策は MyGrep_Damemoji で設定します。 |
| MyGrep_yagrep_opt = 1 | マルチバイトオプションを有効にする。 ダメ文字対策は MyGrep_Damemoji で設定します。 |
| MyGrep_yagrep_opt = 2 | マルチバイトオプションを有効にする。 ダメ文字対策は MyGrep_Damemoji に関わらず無効になります。 |
現在のデフォルト値は0です。
yagrepで cp932の「ダメ文字」が検索できる場合は MyGrep_yagrep_opt = 2 か、 MyGrep_Damemoji = 0 に設定して使用してみて下さい。
QFixGrep - vim用grepヘルパー | QFixGrep - インストール | QFixGrep - 使い方と操作一覧 | QFixGrep - オプション | Shift_JIS(cp932)の「ダメ文字」 | トラブルシューティング