フィルタの使用


ファイルやフォルダ比較の際、比較範囲を限定するためにファイルフィルタを使用することができます。 これは、比較結果から、あなたが興味のない差異を取り除きたい場合に便利です。 フィルタは、正規表現を元に規定します。 WinMerge は、ポピュラーな PCRE (Perl Compatible Regular Expressions) 正規表現エンジンを使用しています。

フィルタの基本機能はシンプルです。 通常比較されるであろう、それぞれのアイテム(フォルダ、ファイル、ファイル中の行)を評価し、 対象のアイテムがフィルタ式にマッチした場合、フィルタを適用します。 フィルタタイプにより、アイテムは、比較に含められるか、除外されるかのどちらかです。

フォルダ比較用とファイル比較用の異なる WinMerge フィルタがあります。

フォルダ比較: ファイルマスクとファイルフィルタ

単純なファイルマスク、または、より複雑なフィルタにより、 ファイルフィルタ中で指定された複数の規則を適用することで、 フォルダ比較中に含めるファイルを指定することができます。 ファイルマスクとファイルフィルタの両方を、同一の操作中で適用することができます。

フィルタされるファイルやフォルダは、デフォルトで隠されます。 それは、典型的にあなたが望むものでしょう。フィルタされたアイテムを表示するには、 表示スキップされた項目の表示をクリックしてください。 しかし、フォルダ比較ウィンドウは、それらについて最小限の情報しか表示しません。 例えば、あなたは、スキップされたファイルがテキストファイルかバイナリファイルか判らないでしょう。

ファイル比較: 行フィルタ

行フィルタは、ファイル比較操作のみに適用されます。 それにより、単一行の差異を無視することができます。

1. ファイルマスクの使用

フォルダ比較中に含める拡張子を指定する、1つか複数の ファイルマスクを使用することができます。 その他すべてのファイルは、選択から省かれます。

1.1. ファイルマスクと定義と適用

フォルダ比較操作を実行時に、ファイルマスクを定義し適用する:

  • ファイルまたはフォルダの選択ダイアログを使用しているなら、 1(左)2(右)のフォルダ選択後、 フィルタフィールドへ、 1つか複数のファイルマスクを入力してください。 マスクは、フォルダ比較操作を開始した時に適用されます。

  • WinMergeのコマンドラインを使用している場合は、ファイルマスクを指定する -fフラグ(次のセクションの例を参照)を使用してください。

フィールドやコマンドラインで、ファイルマスクとファイルフィルタの、 両方を指定することはできないことを憶えておいてください。

1.2. ファイルマスクの文法と例

このシンタックスは、ファイルマスク用です:

*.[拡張子][区切り文字*.拡張子...]

有効な区切り文字はスペース、カンマ、コロン、セミコロンです。

拡張子なしのマスク(*.)は、 README の様な、拡張子なしのファイルを選択します。

例1 ファイルマスク

このコマンドラインの例では、フォルダ比較操作は、拡張子 xmltxtのファイルのみを含みます。 その他すべてのファイルは省かれます:

WinMergeU c:\project\docs c:\temp /f *.xml;*.txt


2. ファイルフィルタの使用

ファイルフィルタは、拡張子 fltのテキストファイルです。 これらは、フォルダ比較用の複数のフィルタルールを適用することを可能にします。 ファイルマスクと異なり、ファイルフィルタは、含むか除外、どちらかにマッチすることができます。

WinMergeは、たくさんの定義済ファイルフィルタをインストールします。 もし、必要なフィルタが、これらのファイルフィルタで提供されていなかったら、 自分自身で作成することができます。 タスクをもっと簡単にするために、WinMergeは、 FileFilter.tmplという名前のテンプレートも提供しています。 このセクションは、比較にファイルフィルタを適用する方法と、ファイルフィルタの文法を説明します。 「フィルタダイアログの使用」では、フィルタの追加、編集、管理方法について説明します。

2.1. ファイルフィルタの場所

WinMergeは、次の場所のファイルフィルタを自動的に検出します:

WinMerge インストールフォルダのFilters フォルダ

ここには、定義済ファイルフィルタがインストールされています。例えば、 C:\Program Files\WinMerge\Filters。 システム上のすべてのユーザーに有効にするために、 ここにファイルフィルタを作成、または、コピーすることができます。

新しいファイルフィルタを作る前に、定義済フィルタに必要なものが含まれているか確認してください。 含まれていない場合、定義済ファイルの中から役立つルールが見つかるかもしれません。

デフォルトプライベートフィルタフォルダ

このフォルダの場所は、WinMerge オプションの、システムページで定義されています。 デフォルトでは、あなたのユーザプロファイルフォルダのサブフォルダとして指定されています (Windows XPなら、My Documents\WinMerge\Filters)。 通常、ここに作成、または、コピーされたフィルタは、 あなただけが見ることができます。 新しいファイルフィルタを作成したら、それらをプライベートにするために、 ここにコピーすることができます。

その他のフォルダにあるファイルフィルタを適用する前に、 それらをインストールしなければなりません。

2.2. ファイルフィルタの適用

次のいくつかの方法で、ファイルフィルタを適用することができます:

  • ファイルまたはフォルダの選択ダイアログから、フォルダ比較を起動した時:

    1. 1(左)2(右)のフォルダ選択後、 フィルタフィールドの隣にある 選択ボタンをクリックしてください。

    2. フィルタダイアログで、ファイルフィルタを選択し、 フィルタフィールドへロードするには、ファイルフィルタタブを使用します。

      注意

      ファイルフィルタが有効になっている(訳注: 何れかのファイルフィルタが選択されている状態)場合、選択されたファイルフィルタは、 フィルタフィールドへ既にロードされています。

    3. 比較操作を続けてください。操作を開始した時、 フィルタフィールドのファイルが適用されます。

  • フォルダ比較操作起動後(違うフィルタを適用した、 または、フィルタを無効にしてしまった時など)にファイルフィルタを変更するには:

    1. ツールフィルタをクリックしてください。

    2. フィルタダイアログで、新しいフィルタを設定し、 OKをクリックしてください。

    3. フィルタダイアログを閉じた時、新しいフィルタは自動では適用されません: フォルダ比較ウィンドウ中で新しい結果を見るには、 F5を押下してください。

  • WinMerge コマンドラインから、 フォルダ比較起動時にファイルフィルタを指定するには、 -fフラグを使用してください。

フィールドやコマンドラインで、 ファイルマスクとファイルフィルタの両方を指定する ことはできないことを思い出してください。

2.3. ファイルフィルタの文法

このセクションは、WinMerge ファイルフィルタの文法と、記述のためのガイドラインの提供について説明します。

コメント記号は、 ##です。 コメント記号の後にある、行内のすべての文字は無視されます。 WinMergeは、ルール中のほとんどの空白文字を無視します。 しかしながら、通常は、コメントの前に1つか複数の空白文字(スペースかタブ)が置かれるでしょう。 ルール中で、 ##を文字列として使用するには、後ろの空白文字を取り除いてください。

ファイルフィルタで、まずはじめに必要な2行は:

name

ファイルダイアログに表示されるフィルタ名です

def

適用されるフィルタタイプです。次の値のうち、1つを指定してください:

include

指定されたルールにマッチしたアイテム以外はすべて含めます。

exclude

指定されたルールにマッチしたアイテム以外はすべて除外します。

exclude メソッドを選択した時は、サブフォルダを指定する d(ディレクトリ)ルールも追加しなければなりません。 このように、すべてのサブフォルダを指定するのは、通常良いアイデアです:

d: \\*$ ## Subfolders

ティップ

これらの用語で混乱しないでください。ファイルフィルタの includeルールは、「何を含めるか」を指定するわけではありません。 「何を含めない」かを指定します。 同様に、excludeルールは、「何を除外する」かを指定するわけではありません。 「何を除外しないか」を指定します。

次に、フィルタファイルは、1つ以上のフィルタルールを含むべきです。 あなたは、たくさんのルールを好きなだけ追加できます。 1行には1つのルールがあるべきで、それぞれのルールは、 それぞれ1行にあるべきです(ルール中での改行は許可されません)。 (訳注: 回りくどいですが、「ルールは1行で記述してください」ということです。) それぞれのルールは、タイプデザイナ f:d:を含み、その後に、正規表現が続きます:

f: regexp

ファイルにマッチ、または、

d: regexp

フォルダにマッチ

多くの正規表現の特殊文字の中で、次の文字は、ファイルフィルタでは特に重要です:

^ (行頭)

ルールが正しく動作するために頻繁に必要になります。

$ (行末)

ルールが正しく動作するために頻繁に必要になります。例えば:

\.c$ ## 拡張子 
              cのファイルのみにマッチします。
              \.c ## cppcomのような、拡張子が 
              cで始まるファイルにマッチします。
\ (エスケープ)

通常の文字を、特殊文字にマッチさせるために使います。 例えば、フォルダ名にマッチするために、 フォルダ区切り文字のバックスラッシュの前に、 バックスラッシュを置きます(\\)。 ファイル名中のドットにマッチするために、 バックスラッシュを指定し、その後にドットを置きます(\.)。

特殊文字やワイルドカードは、ファイル名とマッチさせるためには、使用されません。 ある型のすべてのファイル名にマッチするためには、単にファイル名を省略します。

ルールは、大文字・小文字を区別しません。例えば、 f: \.bat$は、 winmerge.batcompare.BATにマッチします。

例2 ファイルフィルタルールの例

シンプルなファイルフィルタルール:

f: \.cpp$ ## *.cppファイルにマッチ
          f: \.h$ ## *.hファイルにマッチ
          f: ^My ## My*.*ファイルにマッチ
          f: Dlg\. ## *Dlg.*ファイルにマッチ
          d: \\test$ ## testフォルダにマッチ
          d: ^\\Build$ ## Buildフォルダマッチ
          d: Temp$ ## *Tempフォルダにマッチ (例:FirstTemp)
          d: Src ## *Src*フォルダにマッチ

いくつかのルールは、もっと複雑な正規表現です:

          f: ^\.#.*$ ## .#filename.versionファイル
          f: Dlg\.c(pp)?$ ## *Dlg.c*Dlg.cppファイル
          f: ^I.*\.h$ ## I*.hファイル
          f: Srv[1-9]\.def$ ## *Srv1.def から *Srv9.defファイル
          f: ^[h,k,m] ## h*.*d、k*.*m*.*ファイル

3. 行フィルタの使用

ファイル比較で単一行を無視するために、行フィルタを使用することができます。 例えば、コメント、生成されたコードの決まった型や、 バージョン管理システムのタイムスタンプの様なものを無視するために、 行フィルタを使うかもしれません。各行フィルタは1つのルールです。 ファイル比較のために、たくさんの行フィルタを使用することができます。

フィルタの追加、編集、管理については、 「フィルタダイアログの使用」を参照してください。

3.1. 行フィルタの適用

次の方法で、行フィルタを適用することができます:

  • ファイルまたはフォルダの選択ダイアログから、 ファイル比較を起動する場合

    1. 1(左)2(右)のファイル選択後、 フィルタフィールドの隣の 選択をクリックしてください。

    2. フィルタダイアログで、使用したい行フィルタを有効化するため、 また、現在どの行フィルタが有効かを確認するには、行フィルタタブを使います。

      注意

      フィルタフィールドは、 どの行フィルタが有効化されているかを表示しません。

    3. ファイル比較操作を続けてください。 操作を開始した時に、有効化された行フィルタが適用されます。

  • 既に、ファイル比較操作を起動後 (違うフィルタを適用した、または、フィルタを無効にしてしまった時など)は、

    1. ツールフィルタをクリックしてください。

    2. ファイルフィルタタブを開いてください。

    3. あなたが適用したい行フィルタの行にチェックしてください。 また、適用したくないフィルタは、チェックを外してください。

      新規編集削除ボタンを使用して、 フィルタを追加、編集、削除することもできます。

    4. 行フィルタ機能を有効にするには、 行フィルタを有効にするにチェックしてください。 行フィルタ機能を無効にするには、チェックを外してください。

    5. OKをクリックして、 ファイルフィルタダイアログを閉じてください。

    6. F5を押下して変更を適用し、 ファイル比較ウィンドウをリフレッシュしてください。

3.2. 行フィルタの文法

行フィルタは、行フィルタルールが有効化されている場合、 比較ファイル中の単一行の差異毎に評価されるルールです。 単一行の差異にルールがマッチした時、その差異は無視されます。

無視された差異は、ファイル比較ウィンドウ中では、 無視された差異の色(WinMergeオプションの色ページで定義されている) でマークされます。 これは、その他のタイプと無視された差異を区別できるようにします。 しかし、無視された差異は、選択やマージすることができません。

行フィルタマッチは、2つの考えに基づいて記述されるかもしれません:

  • ルールが、行のある部分にマッチした時、差異全体が無視されます。 つまり、行の一部だけをフィルタすることはできません。 例えば、2つのファイルに、次の単一行の差異があると仮定した場合:

    File1: 

    # Jean Sibelius

    File2: 

    # Janne Sibelius

    フィルタなしの場合、行は差異として検出されます。 しかし、行フィルタを ^#の式とともに適用する場合、その行は同一であると評価されます。 なぜなら、式は、両方のファイルにマッチする最初の文字のみを指定しているからです。

  • ルールは、すべての行にマッチした場合に、複数行差異に適用されます。 例えば、次の2行の差異を考えてみてください:

    File1: 

    # Jean Sibelius
    # Pekka Himanen

    File2: 

    # Janne Sibelius
    Pekka Himanen

    同じ ^#ルールは、1行目にマッチしますが、2行目にはマッチしません。 したがって、差異は無視されません。

ティップ

パターンの正確さを制御するために、 行頭(^)と行末($) 記号を使用することは、大抵、良い習慣です。 なぜなら、式が、行のある部分にマッチした場合に、 ルールが適用されるからです。

例3 行フィルタサンプル

^MYTAG$

厳密に、 MYTAGにマッチする行をフィルタします

^::

::で始まる行をフィルタします

^/\*.*\*/$

/*で始まり、 */で終わる行をフィルタします

^[1-5]00

数字の、100、200、300、400、500 で始まる行をフィルタします


例4 CVS の Id 行にマッチする行フィルタルール

CVS の Id 行は、次の様なものです:

// $Id: Filters.xml 7591 2013-01-20 15:47:42Z christianlist $

そしてこれは、次のルールでフィルタできます:

^// \WId: .*\$

例5 poファイルの行コメントフィルタ

poファイルの行コメントは、次の様なものです:

#: src/filename.c:766

そしてこれは、次のルールでフィルタできます:

^#

4. フィルタダイアログの使用

このセクションは、ファイルフィルタと行フィルタの作成・管理機能を提供する、 フィルタダイアログの説明をします。

フィルタダイアログを開くには、次の何れかの方法を使用してください:

  • ファイルまたはフォルダの選択ダイアログで、 フィルタフィールドの右にある、 選択ボタンをクリックしてください。 フォルダ比較用のファイルフィルタを適用したい時は、方法を使用してください。

  • ツールフィルタをクリックしてください。 この方法は、ファイルまたはフォルダの選択ダイアログを開いている時以外に使用可能です。

フィルタダイアログには、それぞれの WinMergeフィルタ用のタブがあります:

ファイルフィルタ

フォルダ比較用のファイルフィルタを設定するには、このタブを選択してください。

Linefilters

ファイル比較用の行フィルタを設定するには、こちらのタブを使用してください。

4.1. ファイルフィルタタブの使用

このタブの主要部分は、フォルダ比較用に利用可能なファイルフィルタの一覧です。 このリストは、共有、個人、そして、 「ファイルフィルタの場所」で説明されている、 WinMergeが知り得るインストール済みのファイルフィルタを含んでいます。

4.1.1. ファイルフィルタの有効化と無効化

ファイルフィルタが、フォルダ比較操作で、それを有効にすること、 また、フィルタが使用され始めてから、 現在のフィルタを止めるために無効にすることを可能にしなければなりません:

  1. まだ、フィルタダイアログを開いていない場合は、開いてください

  2. ファイルフィルタを選択、もしくは、リストから <なし>を選択しくてださい。

  3. OKをクリックして、 フィルタダイアログを閉じてください。

ファイルフィルタを有効にした後でそれらを適用する方法が、いくつかあります。 詳細は、 「ファイルフィルタの適用」を参照してください。

4.1.2. ファイルフィルタの設定

ファイルフィルタリストの管理と フィルタの新規作成には、これらのボタンを使用してください:

テスト

フィルタがどのように動作するか素早く確認するには、 リスト中のファイルフィルタを選択し、 テストをクリックしてください。 詳細は、 「ファイルフィルタのテスト」を参照してください。

インストール

ファイルフィルタを配置し、フィルタリストへ追加することができます。 ファイルフィルタは、それらをインストールしない限り、 共有フォルダ、デフォルトのプライベートフォルダのどちらでも検出されません。

新規

共有フォルダかプライベートフィルタフォルダのどちらかに、 ファイルテンプレートの新しいコピーを作成します。 「ファイルフィルタの作成」で説明されているように、 テンプレートを編集、ルールの追加を行ってください。

編集

デフォルトエディタでファイルを開くには、リスト中のファイルフィルタを選択し、 編集をクリックしてください。

削除

ファイルを削除しリストから取り除くには、 リスト中のファイルフィルタを選択し、 削除をクリックしてください。 これで、本当にファイルは削除されました。

OKをクリックして、 フィルタダイアログを閉じた時、変更は保存されます。 行フィルタは、Windowsのレジストリに保存されます。

4.1.3. ファイルフィルタの作成

WinMergeにインストール済のファイルフィルタが、 お望みのフィルタを提供していないなら、あなた自身で作成することができます:

  1. ツールフィルタをクリックしてください。 または、ファイルまたはフォルダの選択ダイアログから、 フィルタフィールドの右にある、 選択ボタンをクリックしてください。

  2. フィルタダイアログのファイルフィルタタブの、 新規ボタンをクリックしてください。

  3. 共有/プライベートフィルタダイアログで、 共有フィルタ、または、 プライベートフィルタ (これらを何に使用するかは、 「ファイルフィルタの場所」を参照してください)を選択し、 OKをクリックしてください。

    お使いのシステムの共有、または、プライベートフォルダが、 「新しいフィルタのファイル名を指定してください」ダイアログに開きます (プライベートフォルダが存在しない場合は、WinMergeが作成します)。

  4. 「新しいフィルタのファイル名を指定してください」ダイアログで、 ファイル名を入力し 保存をクリックしてください。

    注意

    既存のファイル名を選ばないでください: 既存のファイルを編集するには、 2に戻って、 「新規」の代わりに、「編集」をクリックしてください。

    WinMergeは、新しいファイルを、テンプレート: FileFilter.tmplを用いて作成し、 デフォルトのテキストエディタでそれを開きます。

  5. テンプレートの編集は、テンプレートの指示に従って、 プレースホルダ名と説明の更新、 「ファイルフィルタの文法」で説明されている、 フィルタルールの追加を行ってください。 テキストエディタでファイルを保存してください。

    ティップ

    あなたが作成中のルールを、素早くテストしたい場合は、 フィルタダイアログの「テスト」ボタンをクリックしてみてください。 詳細は、「ファイルフィルタのテスト」を参照してください。

  6. 標準の フィルタフォルダに 、ファイルフィルタを作成したにも関わらず、 フィルタダイアログがその新しいファイルフィルタを表示しない場合は、 一度、OKをクリックしてダイアログを閉じてください。 次に、 ツールフィルタをクリックし、再度ダイアログを開いてください。 ファイルフィルタリストは、 新しいファイルフィルタを含んでいるでしょう。

    お使いのシステム上の、別の場所にファイルを保存した場合、 あなたがインストールしない限り、WinMergeは、それを検出することができません。 システム上のどこかにあるファイルフィルタを検出させるには:

    1. フィルタダイアログの インストールをクリックしてください。

    2. 「インストールするファイルフィルタの位置」ダイアログで、システム上の fltファイルを選択し、 開くをクリックしてください。 ファイルフィルタリストは、インストールされたファイルフィルタを含んでいるでしょう。

4.1.4. ファイルフィルタのテスト

新しいルール作成や既存のルールの理解を補助するため、 サンプルデータに対し素早くファイルフィルタをテストするには、 テストフィルタダイアログを使用してください。 それは、フルで比較操作を走らせるより簡単です。

フィルタダイアログから始めます:

  1. ファイルフィルタタブで、テストしたいファイルフィルタを選択してください。

  2. テストするルールを確認したい場合は、 編集をクリックしてください。 ファイルが開き、次のステップの間、内容を確認することができます。

  3. テストをクリックしてください。

  4. フィルタのテストダイアログで、テストするルールの型を選択してください:

    • ファイルフィルタ中のファイルルール、 f:をテストするには、 フォルダ名オプションのチェックを外してください。

    • フォルダルール、 d:をテストするには、 フォルダ名オプションにチェックを入れてください。

  5. テスト用のテキストを入力してください。

    テキストは、テストするルールの型に適したものであるべきです。 例えば、フォルダ名オプションをチェックした場合、 あなたは「\temp」の様なフォルダ名を入力したいでしょう。

    結果欄は、入力したテキストを、 次のどちらかのステータスと共に表示します: passed、または、 failed

4.2. 行フィルタタブの使用

ファイル比較用の行フィルタの設定と有効化には、このタブを使用してください。 タブは、ルールの一覧を持っています。それぞれのルールは、1つの正規表現を含みます。 ファイル比較用に、リストから複数のルールを組み合わせて適用することができます。

4.2.1. 行フィルタの設定

下の 正規表現リストには、 いつでもルールの追加、編集、削除に使うことのできる、編集欄とボタンがあります。

新しいルールを追加するには:

  1. 新規ボタンをクリックしてください。 カーソルが自動的に編集欄へ移動します。

  2. 正規表現リストの下にある、編集欄に式を入力してください。

  3. 保存をクリックし、リストへ式を読み込んでください。

既存のルールを編集するには:

  1. 行を選択し、 編集をクリックしてください。

  2. 編集欄の式を編集してください。

  3. 編集が完了したら、 保存をクリックしてください。

ルールを削除するには、ルールを選択(チェック)し、 削除ボタンをクリックしてください。

4.2.2. 行フィルタの有効化と無効化

  1. 正規表現リストで、 適用したいフィルタにチェックを入れ、適用したくないフィルタはチェックを外すだけです。

  2. 行フィルタを有効にするオプションに チェックを入れるか、外してください。 行フィルタを有効にした場合、 正規表現リストで、現在チェックされているすべてのルールが使用されます。 行フィルタを無効にした場合、たとえそれらがチェックされていても、ルールは使用されません。

  3. OKをクリックして、フィルタダイアログを閉じ、設定を保存してください。

それらを有効にした後にファイルフィルタを適用する、いくつかの方法があります。 詳細は、 「行フィルタの適用」を参照してください。

5. 正規表現のヘルプ

正規表現は、非常に複雑になり得ます。幸い、WinMerge のほとんどのファイルフィルタは、このトピックの例からもわかるように、シンプルな範囲の表現です。 WinMergeと共にインストールされるフィルタファイルは、多くの役に立つ例を含んでいます。

最後に、Web上には、正規表現を手助けする、これらのサイトを含むたくさんの情報源があります: