QFixGrep - オプション

QFixGrepのオプション一覧

QFixHowm/QFixGrepオプション一覧」を参照してください。

QuickFix/ロケーションリスト

デフォルトではmakeや他のプラグインから「QuickFixウィンドウ」を開いてもプレビューや絞り込み等は行いません。

これは一部のQuickFixウィンドウを使用するプラグイン等との相性問題を回避するためです。

ただほとんどの場合はQuickFixウィンドウでのプレビューや絞り込みが有効にしておいたほうがなにかと便利なので、次の設定を試してみてください。

" プレビューや絞り込みの拡張機能有効化オプション

" 1 : QuickFix/ロケーションリストの両方で有効

let QFixWin_EnableMode = 1

" QFixHowm/QFixGrepの結果表示にロケーションリストを使用する/しない

let QFix_UseLocationList = 1

最初はとりあえず有効にしておいて、何か問題があったらデフォルトに戻すことをおすすめします。

ロケーションリストについて

Vimにはロケーションリストというウィンドウが存在します。

QuickFixウィンドウとロケーションリストはどちらも機能的には同じものですが Vimと対応しているのが QuickFixウィンドウで、ウィンドウと対応しているのがロケーションリストです。

このためロケーションリストは対応したウィンドウと同時に破棄される一時的なウィンドウ(バッファ)といえます。

詳しくは:h quickfixや:h location-listを参照してください。

ウィンドウ表示オプション

QuickFix/ロケーションリストの拡張機能制御はQFixWin_EnableModeとQFix_UseLocationListで行います。

プレビューや絞り込みの有効化指定オプション

(QFixWin_EnableModeで指定する)

QFixHowm/QFixGrepで使用するウィンドウ指定

(QFix_UseLocationListで指定する)

0

1

QFixHowm/QFixGrepでQuickFixウィンドウを使用する

(コマンドモードからのウィンドウ再表示は :copen)

QFixHowm/QFixGrepでロケーションリストを使用する

(コマンドモードからのウィンドウ再表示は :lopen)

<C-w>. や :QFixCopen等の QFixHowm/QFixGrepコマンドで表示する場合はcopenとlopenのどちらを使うか意識する必要はありません

QFixGrepで使用するウィンドウ指定

(MyGrep_UseLocationListで指定する)

0

1

QFixGrepでQuickFixウィンドウを使用する

(コマンドモードからのウィンドウ再表示は :copen)

QFixGrepでロケーションリストを使用する

(コマンドモードからのウィンドウ再表示は :lopen)

無設定時にはQFix_UseLocationListが使用されます。

このオプションを設定した場合、QFixGrepのみに有効でQFix_UseLocationリストより優先されます。

ロケーションリストの挙動

QuickFixウィンドウとロケーションリストは若干挙動が異なるようで、動作としてはQuickFixウィンドウを使用するほうが好ましい動作をするようです。

QFixHowm/QFixGrepでもQuickFixウィンドウを使用するには以下のようにします。

" プレビューや絞り込みの拡張機能有効化オプション

" 1 : QuickFix/ロケーションリストの両方で有効

let QFixWin_EnableMode = 1

" QFixHowm/QFixGrepでロケーションリストを使用する/しない

let QFix_UseLocationList = 0

この場合は何か問題があったら拡張機能をQFixHowm/QFixGrep以外では無効化するとよいでしょう。

" プレビューや絞り込みの拡張機能有効化オプション

" 3 : QFixHowm/QFixGrepのみ有効

let QFixWin_EnableMode = 3

Quickfixウィンドウ表示をカスタマイズ

Quickfixウィンドウやプレビューウィンドウの表示位置を指定可能です。

例えば以下のように使用します。

狭い画面で使用する

ネットブックなど画面(特に縦)が狭い場合はQuickfixウィンドウを垂直分割して winwidth を設定すると良いかもしれません。

winwidthを設定すると、アクティブなウィンドウの横幅が指定サイズ以上に変更されるので Quickfixウィンドウを常駐させても画面を縦に広く使えます。

" Quickfixウィンドウを最も右側に表示

let QFix_CopenCmd = 'vertical botright'

" アクティブウィンドウの横幅指定

set winwidth=60

ウィンドウ表示の設定

ウィンドウの表示位置は以下のオプションで設定可能です。

Quickfixウィンドウ

プレビューウィンドウ

QFix_CopenCmd

QFix_PreviewOpenCmd

ウィンドウの位置指定に使用できるコマンドの詳細については :help vertical 以降を参照してみてください。

ウィンドウの横幅は以下のオプションで設定可能です。

Quickfixウィンドウ

プレビューウィンドウ

QFix_Width

QFix_PreviewWidth

通常は横幅を設定する必要はありません。

ウィンドウ位置指定の設定例

分割状態にかかわらず、常に一番下に表示(Quickfixウィンドウ)

let QFix_CopenCmd = 'botright'

垂直分割した最も左側に水平表示(Quickfixウィンドウ)

let QFix_CopenCmd = 'vertical topleft'

垂直分割した最も右側に水平表示(Quickfixウィンドウ)

let QFix_CopenCmd = 'vertical botright'

右側に表示(プレビューウィンドウ)

let QFix_PreviewOpenCmd = 'vertical rightbelow'

左側に表示(プレビューウィンドウ)

let QFix_PreviewOpenCmd = 'vertical leftabove'

下側に表示(プレビューウィンドウ)

let QFix_PreviewOpenCmd = 'rightbelow'

プレビューウィンドウを水平方向に表示する際の注意

プレビューウィンドウの表示位置を水平表示にするのは可能ですが、Vimがウィンドウサイズを調整するため表示が見にくくなる事があります。

このような場合は各種ウィンドウの横幅を指定すると見やすくできます。

当然Vimのウィンドウサイズによって設定を変更する必要があるので、水平表示は基本的に推奨しません。

水平表示を使用して問題がある際はVimのウィンドウサイズを固定にして使用するなどしてください。

" 垂直分割した右側に水平表示(プレビューウィンドウ)

let QFix_PreviewOpenCmd = 'vertical rightbelow'

" Quickfixウィンドウの横幅指定

let QFix_Width = 60

" プレビューウィンドウの横幅指定

let QFix_PreviewWidth = 60

" QFixHowmのメニュー画面の横幅指定

let QFixHowm_MenuWidth = 60

" アクティブウィンドウの横幅指定

set winwidth=60

数値は環境に合わせて変更する必要があります。

previewheight

他のプラグインとの兼ね合いなどで previewheightと違う値をウィンドウ高さとして指定したい場合は QFix_PreviewHeightを設定してください。

let QFix_PreviewHeight = 12

QuickFixウィンドウではなくロケーションリストを使用する

Vimで作業中にmakeなどでQuickFixウィンドウを使用していると、QFixHowm/QFixGrepではQuickFixウィンドウを使用したくない場面もあるかもしれません。

makeの結果を見ながらソースをgrepして表示したい場合などです。(この場合は :lmake を使うほうが便利かもしれません)

現在表示されているQuickFixウィンドウを残したまま別のQuickFixウィンドウ使用コマンドを実行したい場合は & を押して現在のQuickFixウィンドウをロケーションリストへコピーしてみてください。

QuickFixウィンドウとロケーションリストはどちらも機能的には同じものですが Vimと対応しているのが QuickFixウィンドウで、ウィンドウと対応しているのがロケーションリストです。

このためロケーションリストは対応したウィンドウと同時に破棄される一時的なウィンドウ(バッファ)といえます。

詳しくは :help quickfixや :help location-list を参照してください。

Quickfixウィンドウコマンド

<C-w>,

<C-w>.

<C-w>/

Quickfixウィンドウのオープン/クローズ

Quickfixウィンドウへ移動

多数のウィンドウを開いていても、一度でQuickfixウィンドウに移動出来ます。

5<C-w>. のようにカウント指定すると指定サイズの高さに変更されます。

Quickfixウィンドウ上ではウィンドウ高さをデフォルトに戻します。

以降使用するウィンドウを QuickFix/ロケーションリストにトグル切替

オプション設定

オプションでロケーションリスト使用を設定するにはQFix_UseLocationListを設定します。

" QuickFixではなくロケーションリストを使用する

let QFix_UseLocationList = 0

ウィンドウオプション

ウィンドウの開き方も個別に指定可能です。

" QuickFixウィンドウコマンド

let QFix_CopenCmd0 = 'rightbelow' " ロケーションリストコマンド

let QFix_CopenCmd1 = 'vertical botright'

設定していない場合はデフォルトが使用されます。

" ウィンドウコマンド(デフォルト)

let QFix_CopenCmd = ''

その他

QFixWinで使用しないウィンドウ(リスト)は :copenか :lopenで開いてください。

なおロケーションリストで使用する場合、QuickFixウィンドウとは挙動がウィンドウ周りで若干異なることがあります。

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を設定します。

すでに vim の grepprg で外部grepを使用しているなら、mygrepprg は grepprg と同じもので動作すると思いますがオプションは省いて下さい。

let mygrepprg = 'grep'

pathは環境に合わせて下さい。

外部grep(OS)のshellエンコーディングはMyGrep_ShellEncodingで指定します。

通常はデフォルトのままで動作するはずなので問題がなければ設定は不要です。

let MyGrep_ShellEncoding = 'cp932'

外部grepのshellエンコードは検索対象のファイル名やpathが全角を含む場合に関係します。

shellエンコードは Windowsは cp932 で Linux(Ubuntu)は utf-8 です。

cp932(Shift_JIS) のファイルでは、一部の日本語文字(ダメ文字)が、正規表現を使用して、grep検索できないことがあります。

正規表現を使用しない検索には問題有りませんので、日本語の検索では基本的に 固定文字列検索を使用して、どうしても必要な時に正規表現検索を使用することをおすすめします。

詳しくは「cygwin/GNU grepの「ダメ文字」対策」 を参照して下さい。

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

外部grepの問題点

外部grepで使用可能なエンコーディング指定

外部grepで指定以外のエンコーディングの日本語を含む文字はvimgrepを使用するように設定可能です。

"grepで使用可能なエンコーディング指定

let MyGrep_Encoding = ''

Windowsでcp932を扱えないGNU grepを使用する場合、以下の様に設定します。

"cp932を扱えないGNU grepの場合

let MyGrep_Encoding = 'cp932'

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>/で検索文字列を貼り付けて絞り込みできます。

日本語検索で正規表現が必要になるケースは少ないと思うので、日本語の場合は通常 FGrepを使用する方が良いかと思います。

QFixGrep で使用する場合は ,f での検索がそれに当たります。

基本的に元のgrepが日本語対応していないので、どうしても結果がおかしいときには VGrep(vimgrep)を使用する方が良いでしょう。

「ダメ文字」対策のオプション

具体的なダメ文字の種類については「Shift_JIS(cp932)の「ダメ文字」」を参照して下さい。

ダメ文字を置き換える正規表現

大抵は以下のどちらかで動作します。

Windowsのcygwin grep用のダメ文字対策設定(デフォルト)

let MyGrep_DamemojiReplaceReg = '(..)'

WindowsのGNU grep用のダメ文字対策設定

let MyGrep_DamemojiReplaceReg = '.'