fudist

QFixGrep - オプション

プレビュー&絞り込み検索付きvim/gvim用日本語対応grepプラグインのオプション解説

QFixGrep - vim用grepヘルパー | QFixGrep - インストール | QFixGrep - 使い方と操作一覧 | QFixGrep - オプション | Shift_JIS(cp932)の「ダメ文字」トラブルシューティング

QFixGrepを使用しない vimとgvimの 「grepの設定と使い方」(別ページ)

QFixGrepを使用しないで cygwin や GNU grepなどの外部grepを扱う場合の設定や、0x5c, 0x7c 等の「ダメ文字」については以下を参照してください。
vimのgrepの設定と使い方
Shift JISの「ダメ文字

このページは vim/gvim用のプレビュー&絞り込み検索(and検索)付きのgrepプラグインQFixGrepのオプションについての解説ページです。
ダウンロードとインストールについては「QFixGrep - vim用grepヘルパー」を参照して下さい。
使用方法は「QFixGrep - 使い方と操作一覧」です。


拡張Quickfixウィンドウのオプション

必要に応じて.vimrcへ追加して下さい。
"Quickfixウィンドウの高さ。0以下ならば最大になる。
"プレビューウィンドウの高さは、set previewheight で指定する。
let QFix_Height                = 10
"Quickfixウィンドウの高さの最大値。
"vimのウィンドウサイズからQFix_HeightMaxを引いた値がQuickfixウィンドウの最大値になる。

let QFix_HeightMax             = 0
"QuickfixウィンドウサイズをQFix_HeightDefaultに固定する/しない。
"QFix_HeightDefaultは無指定なら、起動時にQFix_Heightに設定される。
let QFix_HeightFixMode         = 0

"Quickfixウィンドウから開いた後ウィンドウを閉じる/閉じない。
let QFix_CloseOnJump           = 0

"Quickfixウィンドウでプレビューを有効にする。
let QFix_PreviewEnable         = 1
"Quickfixウィンドウのプレビューでfiletypeのハイライトを有効にする。
"環境やファイルサイズによっては重くなるので、その場合はOFFにしてください。
let QFix_PreviewFtypeHighlight = 1
"カーソルラインを表示する
let QFix_CursorLine            = 1
"プレビュー画面のカーソルラインを表示する
let QFix_PreviewCursorLine     = 1
"アンダーラインにしたい場合は次のようにハイライトを設定する。
"hi CursorLine guifg=NONE guibg=NONE gui=underline

"ファイルを画面分割して開く/開かない。
let QFix_FileOpenMode = 0

"ファイルを分割して開いたときの最小ウィンドウ高さを指定する。
"0なら全てのウィンドウサイズを同じ高さにする。
let QFix_WindowHeightMin = 0


"nowinfixheight、nowinfixwidth を設定するバッファの正規表現
let QFix_nowinfixReg = '\.[0-9a-zA-Z]$\|vimrc$'

QFixGrepのオプション

必要に応じて.vimrcへ追加して下さい。
"grepの対象にしたくないファイル名の正規表現
let MyGrep_ExcludeReg = '[~#]$\|\.bak$\|\.o$\|\.obj$\|\.exe$\|[/\\]tags$'
"使用するgrepの指定。
let mygrepprg = 'internal'
"外部grep(shell)のエンコードを指定する。
let MyGrep_ShellEncoding      = 'cp932'
"「だめ文字」対策を有効/無効
let MyGrep_Damemoji           = 2
"「だめ文字」を置き換える正規表現
let MyGrep_DamemojiReplaceReg = '(..)'
"「だめ文字」を自分で追加指定したい場合は正規表現で指定する。
let MyGrep_DamemojiReplace    = '[]'
"yagrepのマルチバイトオプション
let MyGrep_yagrep_opt = 0


"ユーザ定義可能な追加オプション
let MyGrepcmd_useropt = ''

"Grepコマンドのキーマップ
let MyGrep_Key = 'g'
"Grepコマンドの2ストローク目キーマップ
let MyGrep_KeyB = ','


"QFixGrepの検索時にカーソル位置の単語を拾う/拾わない
let MyGrep_DefaultSearchWord = 1
デフォルトでは g,e のように3ストロークのコマンドですが MyGrep_KeyBを空白にして、2ストロークコマンドとしても使用できます。

grepの対象にしたくないファイル名の正規表現

grepの対象にしたくないファイルは正規表現で指定できます。
let MyGrep_ExcludeReg = '[~#]$\|\.bak$\|\.o$\|\.obj$\|\.exe$\|[/\\]tags$\|^tags$'
デフォルトでは
*~ *# *.bak *.o *.obj *.exe tags
が対象外になります。
/svn/... のように 対象にしたくないpathも指定できます。
let MyGrep_ExcludeReg = '[/\\]svn[/\\]'
Windowsの場合は、shellslash を設定してやると、パスの表記が簡単になります。
set shellslash
let MyGrep_ExcludeReg = '/CVS/'

外部grepに独自のオプションを指定して実行したい場合は、 MyGrepcmd_useroptに設定します。
grepで --exclude が使えるなら MyGrepcmd_useroptに設定してやると検索が速くなります。
let MyGrepcmd_useropt = '--exclude-dir=CVS'

使用するgrepの設定

内部grepを明示的に指定する

内部grep(vimgrep)を明示的に指定する場合、.vimrcに次を追加します。
let mygrepprg = 'internal'
特に指定しない場合もvimgrepが使用されます。
内部grep(vimgrep)を使用する場合は、他に設定する項目はありません。


外部grepを使用する

外部grepを使用する場合は mygrepprgにpath、MyGrep_ShellEncodingに外部grep(shell)のエンコードを指定します。
すでに vim の grepprg で外部grepを使用しているなら、mygrepprg は grepprg と同じもので動作すると思いますがオプションは省いて下さい。
let mygrepprg = 'grep'
let MyGrep_ShellEncoding = 'cp932'
pathは環境に合わせて下さい。

外部grepのshellエンコードは検索対象のファイル名やpathが全角を含む場合に関係します。
shellエンコードは Windowsは cp932 で Linux(Ubuntu)は utf-8 です。
外部grepを使用する設定でもVimgrep等でvimgrepは使用できます。

またcp932(Shift_JIS) のファイルでは、一部の日本語文字(ダメ文字)が、正規表現を使用して、grep検索できないことがあります。
正規表現を使用しない検索には問題有りませんので、日本語の検索では基本的に 固定文字列検索を使用して、どうしても必要な時に正規表現検索を使用することをおすすめします。
詳しくは「cygwin/GNU grepの「ダメ文字」対策」 「yagrepの「ダメ文字」対策」を参照して下さい。

外部grepを使用する場合の問題点は次のページにまとめました。
外部grepの問題点


Windowsの場合

実行ファイルの入手場所

 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/1235908129

UTF-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します。

デフォルト(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)の「ダメ文字」トラブルシューティング