QFixGrep - 使い方と操作一覧
キー操作の表記<CR>はEnterキーの入力、<C-w>はCtrlキー + w というように読み替えて下さい。
コマンド
なにかファイルを開いてから、コマンド一覧のいずれかで検索を実行してみて下さい。
デフォルトではキーマップリーダーに g が設定されているので、 g,e でGrepが実行されます。
gvimではメニューのツール(T)から実行する事も出来ます。
カーソル下の単語が自動的に取り込まれて、検索文字列入力画面になります。
ビジュアルモードで範囲選択している場合は、選択範囲の文字をgrepします。
入力画面の文字列を削除するには<C-u>や<C-w>を使用してください。
使用可能な正規表現は mygrepprgで設定した grepに依存します。
検索するファイルの種類を指定する際は、*.vim *.txt のように 複数の種類を指定可能です。
grep後、自動的にQuickfixウィンドウが開き、検索レジスタにはgrepした文字列が登録されます。
プレビューと絞り込み検索自体はQuickfixウィンドウ汎用ですので現在使用しているgrepがあれば、そのまま実行してQuickfixウィンドウを開くだけでもプレビューは有効になります。
再帰検索
検索するファイルを指定する際、**/*.vimのように **/を付けて指定すると再帰検索としてgrepを行います。
コマンド一覧
キーマップリーダーは以下のオプションで変更できます。
デフォルトでは g,e のように3ストロークですが、2ストロークコマンドにしたい場合は MyGrep_KeyB = '' のように空文字に設定して下さい。
"Grepコマンドのキーマップ
let MyGrep_Key = 'g'
"Grepコマンドの2ストローク目キーマップ
let MyGrep_KeyB = ','
注意 : MyGrep_Keyや MyGrep_KeyBが .vimrcで定義されておらず、 .vimrcで QFixHowm_Key や QFixHowm_KeyB が定義されている場合は QFixHowm_Keyがデフォルトとして使用されます。
コマンド実行時にカーソル位置の単語を拾いますが<C-w> や <C-u>等で削除可能です。
デフォルトの動作は次のオプションで指定します。
" QFixGrepの検索時にカーソル位置の単語を拾う/拾わない
let MyGrep_DefaultSearchWord = 1
Quickfixウィンドウ上の操作は「拡張Quickfixウィンドウの操作」にまとめてあります。
<C-w>, や ToggleQFixWinを使用すると前回のカーソル位置、ソート結果なども保存されますし、起動時のQuickfixウィンドウの高さなども指定できます。
"Quickfixウィンドウの高さ
let QFix_Height = 10
lopen/lcloseを使用した場合はカレントディレクトリを基準にしてパスが表示されますが、<C-w>,等ではQuickfixコマンド(grep,make,vimgrepなど)を実行した時のディレクトリを基準にしてパスが表示されます。
Quickfixウィンドウを独自に処理しているプラグイン等でパス表示が長くなる場合は以下を参照して下さい。
「Quickfix上のパス表示が長くなる」
検索の基点ディレクトリとファイルエンコーディング
検索の基点ディレクトリとファイルエンコーディングは以下のコマンドで変更可能です。
,rM
,rD
,rG
検索ディレクトリモードをカレントディレクトリ/ファイル基点でトグル
ディレクトリを常にサブディレクトリも検索する
検索するファイルエンコーディング指定
検索ディレクトリの基点は「カレントディレクトリ」がデフォルトですが、g,rMでオフにすると「ファイルの存在するディレクトリ」を基点にして検索します。
autochdirやプラグイン等でカレントディレクトリを常にファイルの存在するディレクトリになるよう設定している場合はどちらでも基点はかわりません。
デフォルトを「ファイルの存在するディレクトリ」を基点にしたい場合は MyGrep_CurrentDirMode = 0で指定してください。
" 検索ディレクトリはカレントディレクトリを基点にする
let MyGrep_CurrentDirMode = 0
検索するファイルエンコーディングを現バッファのファイルエンコーディングと異なるファイルエンコーディングに固定したい場合は g,rG で指定します。
現バッファのファイルエンコーディングと同じに戻したい場合は <C-u> 等で削除して空文字列を指定してください。
外部grep使用時のファイルエンコード
外部grepを使用する場合異なる文字エンコードのファイルは検索されません。
Vimgrepならファイルエンコードは自動判別されます。
コマンドモードから実行する
コマンドラインからはディレクトリやファイルエンコーディングを指定してgrep出来ます。
コマンドモードで使用できるファイル指定(*.txt等)は一つだけです。
パス指定には ./などの相対パスも使用可能です。
:Grep 検索文字 c:/temp/*.txt
対象ファイルのエンコーディング指定には --fenc= を使用します。
:Grep --fenc=utf-8 エンコーディング指定して検索 ./temp/*.txt
空白を含む検索文字列は " " でくくって指定して、空白を含むパスは \ でエスケープして指定します。
検索に " " でくくった文字列自体を指定したい場合は " " を二重にするか、 \" でくくって下さい。
:Grep "空白を含む 検索文字とパス" ~/My\ Documents/txt/*.txt
各種オプションも指定可能です。
指定可能なオプションは mygrepprgに設定しているgrepのヘルプを参照してください。
再帰検索は大抵 -r (findstrは /s)です。
:Grep -r 再帰検索 ./temp/*.txt
再帰検索には RGrep、RFGrepも使えます。
:RGrep 再帰検索 *.txt
固定文字列検索には -F のようにオプションを指定するか FGrepを使用してください。
:FGrep 固定文字列検索 ./temp/*.txt
Grepadd、 FGrepadd、RGrepadd、RFGrepadd を使用すると前回の結果を削除することなく検索結果が追加されます。
:Grepadd 追加検索 ./temp/*.txt
拡張Quickfixウィンドウの操作
Quickfixウィンドウコマンド
<C-w>,
<C-w>.
<C-w>/
Quickfixウィンドウのオープン/クローズ
Quickfixウィンドウへ移動
多数のウィンドウを開いていても、一度でQuickfixウィンドウに移動出来ます。
5<C-w>. のようにカウント指定すると指定サイズの高さに変更されます。
Quickfixウィンドウ上ではウィンドウ高さをデフォルトに戻します。
以降使用するウィンドウを QuickFix/ロケーションリストにトグル切替
制御コマンド
QuickfixウィンドウのON/OFFには lopen,lclose等のコマンドが使えますが <C-w>, やコマンドモードから制御コマンドを使用すると前回のカーソル位置、ソート結果なども保存されます。
制御コマンドを好みのキーにマップすることも可能です。
.vimrc設定例
"QuickfixウィンドウをON/OFF
"この設定例ではgsが使用できなくなります。好みに応じて変更して下さい。
nnoremap <silent> gs :ToggleQFixWin<CR>
機能切替
ソートと絞り込み検索
Quickfixの登録行に対するコマンド実行
ソート
Quickfixウィンドウで S を押すとソートの種類を聞いてきます。
m,n,t のいずれかを入力します。
Sort type? (r:reverse)+(m:mtime, n:name, t:text) :
ソートの種類
m
n
t
ファイルの更新時間 (mtime)
ファイル名 (name)
表示されているテキスト内容 (text)
逆順にしたい場合は rt のように、最初に r を付けて下さい。
ソート後に uや Uコマンドでソート前の状態に戻す事が出来ます。
u
U
ソートや絞り込みのアンドゥ
ソートや絞り込みを全て元に戻す
絞り込み検索
Quickfixウィンドウでは絞り込みが出来ます。
s を押すと入力モードになるので、何か適当な文字列(たとえばファイル名)を入れてみてください。
入力した文字列で絞り込まれます。
r では逆に入力した文字列を ”含まない” 結果に絞り込みます。
絞り込み対象はQuickfixに表示されている部分(各行1kバイト)のみが対象になります。
一段階前に戻したい場合は u で最初の状態に戻すのはUです。
<C-r>/ で検索文字列が貼り付け可能で、入力画面では <C-u>、<C-w>、ヒストリも有効です。
s
r
「絞り込み検索」
文字列を指定して絞り込み。
Quickfixに表示されている部分(各行1kバイト)のみが対象になります。
「絞り込み検索」
s コマンドとは逆に、指定した文字列を ”含まない” 行に絞り込みます。
u
U
ソートや絞り込みのアンドゥ
ソートや絞り込みを全て元に戻す
Quickfixウィンドウの保存と読込
Quickfixウィンドウの内容を保存したり、読み込んだりする事が出来ます。
保存、読込の際にカウント指定すると、ファイル名に指定カウントを付加したファイル名で処理します。
現在の結果を保存して一時的に別の検索をしたい場合や、複数の結果を保存したい場合に使用してください。
Quickfix上のコマンド
A
,w
O
,k
現在のQuickfixウィンドウを保存する。
3Aのようにカウント指定すると、ファイル名に指定カウントを付加して保存する。
~/.qfgrep.txt → ~/.qfgrep3.txt
保存されているQuickfixウィンドウを読み込む。
3Oのようにカウント指定すると、ファイル名に指定カウントを付加して読み込む。
~/.qfgrep.txt → ~/.qfgrep3.txt
何かgrepしてからQuickfixウィンドウ上で A を押すと現在のgrep結果が保存されます。
その後に別のgrepを行ってからQuickfixウィンドウ上で O を押すと、保存した検索結果が表示されます。
,w ,k は キーマップリーダーが g なら実際のコマンドは g,w g,k になります。
「Quickfixウィンドウ読み込み」の g,k は全てのバッファで有効なグローバルコマンドです。
保存するファイルはMyGrep_Resultfileで指定します。
"現在登録されているGrep結果を保存するファイル
let MyGrep_Resultfile = '~/.qfgrep.txt'
保存、読込の際にカウント指定すると、ファイル名に指定カウントを付加したファイル名で処理します。
現在の結果を保存して一時的に別の検索をしたい場合や、複数の結果を保存したい場合に使用してください。
たとえば3Oのようにカウントに 3 を指定すると
~/.qfgrep.txt → ~/.qfgrep3.txt
になります。
コマンドで読込、書込も出来ます。
ファイル名を指定しないと、MyGrep_Resultfileが使用されます。
必要なら適当なキーにマップするなどして使用してください。
保存されているQuickfixウィンドウを読み込む
現在のQuickfixウィンドウを保存する
:MyGrepWriteResult ファイル名
:MyGrepReadResult ファイル名
以下のように設定すると<F2>を押すと 2<C-o>で保存した検索結果を表示する事が出来ます。
"現在登録されているGrep結果を保存するファイル
nnoremap <silent> <F2> :MyGrepReadResult ~/.qfixgrep2.txt<CR>
Quickfixリストを利用したコマンド
Quickfix上のコマンド
Q
Quickfixに登録されているリストの各行に対してコマンドを実行する。
ビジュアルモードの範囲指定も有効です。
Quickfixに登録されているリストの各行に対してコマンドを実行可能です。
たとえば grepしてヒットした各行に対して置換を行うなどの場合に使います。
同じようなことは argdo bufdoなどでも可能ですが、本コマンドは絞り込み後や dd 、p で編集したQuickfixリストに対しての実行が可能なので必要に応じて使い分けてください。
実行するコマンドを聞いてくるので指定してください。
デフォルトはノーマルモードのコマンドです。
行削除なら ddのように指定します。
command? dd
:を付けて指定するとコマンドモードのコマンドが指定できます。
abcをxyzに置換するなら以下のようになります。
command? :s/abc/xyz/g
FList (ディレクトリ内のファイル一覧コマンド)
grepとは直接関係有りませんが、ディレクトリ内のファイルリストを表示することもできます。
FList {ディレクトリ}
ディレクトリを指定した場合は指定ディレクトリのファイル一覧、無指定の場合はカレントディレクトリのファイル一覧を表示します。
:FList
c:/tempのファイル一覧
:FList c:/temp
再帰検索の場合は **/*を使用します。
:FList c:/temp/**/*
なおバイナリファイルなどはプレビュー対象外にしておいた方がよいでしょう。
「特定拡張子のファイルでプレビューが遅い / 表示されない場合」