QFixGrep - インストール

インストール

https://github.com/fuenor/qfixgrep/archive/master.zip

  1. qfixgrep-master.zipを解凍します。
  2. qfixgrep-masterというディレクトリが作成されます。
  3. qfixgrep-masterをを適当な場所にコピーして、ランタイムパスを通します。
    1. 以降はqfixapp とリネームしてコピーしたとします。

c:\tempにqfixappをコピーした場合は、_vimrc(Linuxは .vimrc) で次のようにパスを通します。

set runtimepath+=c:/temp/qfixapp

QFixHowmを使用しているなら既にQFixGrepを使用可能な状態のため、インストールの必要はありません。

QuickFixウィンドウのプレビューや絞り込み

デフォルトではQuickFixウィンドウを使用する他のプラグイン等と相性問題を起こさせないため、QuickFixウィンドウでのプレ ビューや絞り込みは有効にしていません。

最初はとりあえず有効にしておいて、他のプラグイン等との併用でなにか問題が起きたら無効化するのをおすすめします。

" QuickFixウィンドウでもプレビューや絞り込みを有効化
let QFixWin_EnableMode = 1
" QFixHowm/QFixGrepの結果表示にロケーションリストを使用する/しない
let QFix_UseLocationList = 1

上記の設定では:makeの結果をQuickFixウィンドウでプレビュー表示を行い、同時にQFixGrepで検索した結果やQFixHowmのメモをロケーションリストに表示して参照したりできます。

問題が起きた場合は、この設定を削除するか適切に変更してください。

詳しい解説は以下にあります。

QuickFix/ロケーションリスト

たとえばQFixHowm/QFixGrepでもQuickfFixウィンドウを使用したい場合は以下を設定してください。

" QuickFixウィンドウでもプレビューや絞り込みを有効化
let QFixWin_EnableMode = 1
" QFixHowm/QFixGrepの結果表示にロケーションリストを使用する/しない
let QFix_UseLocationList = 0

QFixGrepの設定

Linux/Mac/cygwin

Linux/Mac/cygwinの場合は外部grepを設定する必要はありません。

同一ディレクトリにUTF-8とcp932、euc-jpなど異なるエンコーディングのファイルが混在している場合は以下を参照してください。

異なるエンコーディングのファイルが混在している場合

問題なければ次へ進んで下さい。

使い方と操作一覧

android / iOS

android/iOSで標準のgrepを使用できない場合はVimスクリプトによるgrepを使用します。

例えばbusyboxのgrepでは動作しないので、この場合はVimスクリプトによるgrepを使用します。

速度的には遅いので、できれば後述するGNU grepを使用するようにしてください。

" android/iOS
let mygrepprg = 'agrep.vim'

agrepの正規表現はVimの正規表現になります

同一ディレクトリにUTF-8とcp932、euc-jpなど異なるエンコーディングのファイルが混在している場合は以下を参照してください。

異なるエンコーディングのファイルが混在している場合

速度やマーク、履歴等を汚すことに問題がなければvimgrep(内部grep)を使用してもかまいません。

" android/iOS
let mygrepprg = 'internal'

GNU grep

agrep.vimの速度に不満な場合、androidではGNU grepのバイナリを使用すると改善されます。

android-grep.zip

Vimと同じ場所などPATHの通った適当な場所へコピーしてchmodで実行属性を付加してください。

androidの場合は/system/binにgrepが存在することがあるのでフルパスで指定するとよいでしょう。

" android
" /data/data/jackpal.androidterm/usr/binへコピーした場合
let mygrepprg = '/data/data/jackpal.androidterm/usr/bin/grep'

問題なければ次へ進んで下さい。

使い方と操作一覧

Windows

Windowsの標準環境ではgrepが存在しないので代替として findstr (Windows2000以降)が使用されます。

findstrを使用している場合、UTF-8などcp932(Shift_JIS)以外の日本語は fgrep(固定文字列検索)でも検索できません。

何も設定していない場合、日本語を含む文字を cp932以外のファイルに対して検索する場合は自動的に vimgrepが使用されます。

cp932(Shif_JIS)しか使用しないなら問題ありませんが、findstrの正規表現は貧弱です。そういう意味でもできるだけ外部grep等を使用することをおすすめします(MSYS2, Git for Windows, cygwin, GunWIn32等のgrep.exeが使用可能です)

外部grepの設定

Windowsで外部grepが用意できない場合

UTF-8ファイルを日本語でgrepする時は自動でvimgrepが使用されますが、Vimスクリプトで実装されたgrepを使用することもできます。

" 日本語を含む場合のみagrep.vimで検索する
let mygrepprg   = 'findstr'
let myjpgrepprg = 'agrep.vim'

この設定では検索文字列に日本語を含む場合だけagrep.vimを使用することになります。

agrep.vimの正規表現はVimの正規表現を使用するため、検索文字列に日本語を含む場合と、そうでない場合で使える正規表現が異なることになります。

日本語と正規表現を組み合わせて検索する場合は気をつけてください。

すべての場合でagrep.vimを使用する場合は次のように設定します。

" すべてagrep.vimで検索する
let mygrepprg = 'agrep.vim'

速度やマーク、履歴等を汚すことに問題がなければvimgrep(内部grep)を使用してもかまいません。

" 日本語を含む場合はvimgrepを使用する
let myjpgrepprg = 'internal'

外部grepの設定

Windowsの外部grepにはGNU grep互換であれば使用可能です。

Git for Windows, MSYS2, cygwinを利用している場合は、各パッケージに含まれるgrepを使用するように設定可能です。

コマンドプロンプトからGNU grepを実行可能にしているならば設定は不要です。

そうでない場合は以降で解説するようにmygrepprgをフルパス指定するか、Vim上でパスを通してください。

抽出済みgrep(MSYS2)

以下にMSYS2から抽出したgrepバイナリがあります。

grep-msys2.zip

zipを解凍してパスを通すか$VIMへコピーして、mygrepprgを設定します。

let mygrepprg = 'grep'

Vimの:!grepでエラーが出る場合はフルパスで指定するか、Vim上でPATHを通します。。

" フルパス指定
let mygrepprg = 'C:\path\to\bin\grep'

" Vim上でパスを通す
let $PATH .= ';C:\path\to\bin'

PATHは使用環境に合わせて修正してください

Git for Windows

Windowsでgit(Git for Windows)を使用しているならgitのgrep.exeが使用可能です。

https://git-for-windows.github.io/

let mygrepprg = 'grep'

Vimの:!grepでエラーが出る場合はVim上でPATHを通します。

" Git for Windows
let $PATH .= ';C:\Program Files\Git\usr\bin'

PATHは使用環境に合わせて修正してください

MSYS2

Windows用Gnuツールが以下で配布されています。

https://msys2.github.io/

インストールしたら、実行ファイルへパスを通してmygrepprgを設定します。

let mygrepprg = 'grep'

Vimの:!grepでエラーが出る場合はVim上でPATHを通します。

" MSYS2 64bit
let $PATH .= ';C:\msys64\usr\bin'
" MSYS2 32bit
let $PATH .= ';C:\msys32\usr\bin'

PATHは使用環境に合わせて修正してください

cygwin

cygwinをインストールしていてコマンドプロンプトから grepが使える場合は、次のように指定します。

let mygrepprg = 'grep'

Vimの:!grepでエラーが出る場合はVim上でPATHを通します。

" cygwin
let $PATH .= ';C:\cygwin\bin'

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

GnuWin32

Windows用32bitのGnuツールが以下で配布されています。

http://gnuwin32.sourceforge.net/

インストールしたら、実行ファイルへパスを通してmygrepprgを設定します。

let mygrepprg = 'grep'

Vimの:!grepでエラーが出る場合はVim上でPATHを通します。

" 64bit環境

let $PATH .= ';C:\Program Files (x86)\GnuWin32\bin'

" 32bit環境

let $PATH .= ';C:\Program Files\GnuWin32\bin'

PATHは使用環境に合わせて修正してください

異なるエンコーディングのファイルが混在している場合

UTF-8とcp932、euc-jpなど異なるエンコーディングが混在している場合はマルチエンコーディングgrepモードかagrep.vimを使用するとエンコーディングを気にせずgrep可能です。

マルチエンコーディングgrepモード

異なるエンコーディングのファイルが混在している場合にgrepを複数回実行して、エンコーディングを気にせず日本語検索が可能です。

" マルチエンコーディングgrepを使用する
let MyGrep_MultiEncoding = 1

マルチエンコーディングgrepモードの切替は<Leader>rmでも行えます。

なお検索文字列に日本語を含まない場合は、一回しかgrepは実行されません。

マルチエンコーディングgrepで使用するエンコーディングは次のように指定します。

" マルチエンコーディングgrepで使用するエンコーディングリスト
let MyGrep_MultiEncodingList = ['utf-8', 'cp932']

findstrではcp932のみしか検索できないので次に解説するagrep.vimを使用してください。

agrep.vim

agrep.vimはVimスクリプトで実装されたgrepでマルチエンコーディングのgrepが可能です。

agrep.vimは通常のgrepやfindstrより遅いので、検索文字列に日本語を含む場合だけagrep.vimを使用するというのが良いかもしれません。

agrep.vimの正規表現はVimの正規表現を使用することになります。

" Windows
" 日本語を含む場合のみagrep.vimで検索する
let mygrepprg   = 'findstr'
let myjpgrepprg = 'agrep.vim'
let MyGrep_MultiEncodingGrepScript = 1

外部grepを用意している場合はmygrepprgを適宜読み替えてください。

" unix
" 日本語を含む場合のみagrep.vimで検索する
let mygrepprg   = 'grep'
let myjpgrepprg = 'agrep.vim'
let MyGrep_MultiEncodingGrepScript = 1

この場合は日本語を含む場合とそうでない場合で使える正規表現が異なることになるので気をつける必要があります。

速度やマーク、履歴等を汚すことに問題がなければvimgrep(内部grep)を使用してもかまいません。

" 日本語を含む場合はvimgrepを使用する
let myjpgrepprg = 'internal'

grepの設定が終わったら

使い方と操作一覧」へ進んでください。