ファイルやフォルダー比較の際、比較範囲を限定するためにファイルフィルターを使用することができます。 これは、比較結果から、あなたが興味のない差異を取り除きたい場合に便利です。 フィルターは、正規表現を元に規定します。 WinMerge は、ポピュラーな PCRE (Perl Compatible Regular Expressions) 正規表現エンジンを使用しています。
フィルターの基本機能はシンプルです。 通常比較されるであろう、それぞれのアイテム(フォルダー、ファイル、ファイル中の行)を評価し、 対象のアイテムがフィルター式にマッチした場合、フィルターを適用します。 フィルタータイプにより、アイテムは、比較に含められるか、除外されるかのどちらかです。
フォルダー比較用とファイル比較用の異なる WinMerge フィルターがあります。
単純なファイルマスク、または、より複雑なフィルターにより、 ファイルフィルター中で指定された複数の規則を適用することで、 フォルダー比較中に含めるファイルを指定することができます。 ファイルマスクとファイルフィルターの両方を、同一の操作中で適用することができます。
フィルターされるファイルやフォルダーは、デフォルトで隠されます。 それは、典型的にあなたが望むものでしょう。フィルターされたアイテムを表示するには、
→ をクリックしてください。 しかし、フォルダー比較ウィンドウは、それらについて最小限の情報しか表示しません。 例えば、あなたは、スキップされたファイルがテキストファイルかバイナリファイルか判らないでしょう。行フィルターは、ファイル比較操作のみに適用されます。 それにより、単一行の差異を無視することができます。
置換フィルターは、ファイル比較操作のみに適用されます。 置換フィルターは、diffブロック内の文字列を指定された文字列に置換して比較し、 結果が一致する場合はそのdiffブロックを無視します。 これは、興味のない多数の変更を無視するのに役立ちます。
フォルダー比較中に含める拡張子を指定する、1つか複数の ファイルマスクを使用することができます。 その他すべてのファイルは、選択から省かれます。
フォルダー比較操作を実行時に、ファイルマスクを定義し適用する:
ファイルまたはフォルダーの選択ダイアログを使用しているなら、 1(左)と 2(右)のフォルダー選択後、 フィルターフィールドへ、 1つか複数のファイルマスクを入力してください。 マスクは、フォルダー比較操作を開始した時に適用されます。
WinMergeのコマンドラインを使用している場合は、ファイルマスクを指定する
-f
フラグ(次のセクションの例を参照)を使用してください。
フィールドやコマンドラインで、ファイルマスクとファイルフィルターの、 両方を指定することはできないことを憶えておいてください。
このシンタックスは、ファイルマスク用です:
[!](*.[拡張子
]|フォルダーマスク
\)[区切り文字
[!](*.拡張子
|フォルダーマスク
\) ...]
有効な区切り文字はスペース、カンマ、コロン、セミコロンです。
拡張子なしのマスク(*.
)は、
の様な、拡張子なしのファイルを選択します。README
2.16.19 以降、感嘆符(!
)
をマスクの前に付加した場合、そのマスクに一致したファイルは除外されます。
また、バックスラッシュ(\
)をマスクの後に付加した場合、
そのマスクはファイルではなくフォルダーが対象となります。
例1 ファイルマスク
このコマンドラインの例では、フォルダー比較操作は、拡張子
xml
か
txt
のファイルのみを含みます。
その他すべてのファイルは省かれます:
WinMergeU c:\project\docs c:\temp /f *.xml;*.txt
例2 フォルダーの除外(2.16.19以降)
このコマンドラインの例では、フォルダー比較操作は、
.git
と
.vs
フォルダーを除外します:
WinMergeU c:\project\docs c:\temp /f !.git\;!.vs\
ファイルフィルターは、拡張子
flt
のテキストファイルです。
これらは、フォルダー比較用の複数のフィルタールールを適用することを可能にします。
ファイルマスクと異なり、ファイルフィルターは、含むか除外、どちらかにマッチすることができます。
WinMergeは、たくさんの定義済ファイルフィルターをインストールします。
もし、必要なフィルターが、これらのファイルフィルターで提供されていなかったら、
自分自身で作成することができます。
タスクをもっと簡単にするために、WinMergeは、
FileFilter.tmpl
という名前のテンプレートも提供しています。
このセクションは、比較にファイルフィルターを適用する方法と、ファイルフィルターの文法を説明します。
「フィルターダイアログの使用」では、フィルターの追加、編集、管理方法について説明します。
WinMergeは、次の場所のファイルフィルターを自動的に検出します:
ここには、定義済ファイルフィルターがインストールされています。例えば、
C:\Program Files\WinMerge\Filters
。
システム上のすべてのユーザーに有効にするために、
ここにファイルフィルターを作成、または、コピーすることができます。
新しいファイルフィルターを作る前に、定義済フィルターに必要なものが含まれているか確認してください。 含まれていない場合、定義済ファイルの中から役立つルールが見つかるかもしれません。
このフォルダーの場所は、WinMerge
オプションの、システムページで定義されています。
デフォルトでは、あなたのユーザープロファイルフォルダーのサブフォルダーとして指定されています
(Windows 10なら、Documents\WinMerge\Filters
)。
通常、ここに作成、または、コピーされたフィルターは、
あなただけが見ることができます。
新しいファイルフィルターを作成したら、それらをプライベートにするために、
ここにコピーすることができます。
その他のフォルダーにあるファイルフィルターを適用する前に、 それらをインストールしなければなりません。
次のいくつかの方法で、ファイルフィルターを適用することができます:
ファイルまたはフォルダーの選択ダイアログから、フォルダー比較を起動した時:
1(左)と 2(右)のフォルダー選択後、 フィルターフィールドの隣にある ボタンをクリックしてください。
フィルターダイアログで、ファイルフィルターを選択し、 フィルターフィールドへロードするには、ファイルフィルタータブを使用します。
ファイルフィルターが有効になっている(訳注: 何れかのファイルフィルターが選択されている状態)場合、選択されたファイルフィルターは、 フィルターフィールドへ既にロードされています。
比較操作を続けてください。操作を開始した時、 フィルターフィールドのファイルが適用されます。
フォルダー比較操作起動後(違うフィルターを適用した、 または、フィルターを無効にしてしまった時など)にファイルフィルターを変更するには:
→ をクリックしてください。
フィルターダイアログで、新しいフィルターを設定し、
をクリックしてください。フィルターダイアログを閉じた時、新しいフィルターは自動では適用されません: フォルダー比較ウィンドウ中で新しい結果を見るには、 F5を押下してください。
WinMerge コマンドラインから、
フォルダー比較起動時にファイルフィルターを指定するには、
-f
フラグを使用してください。
フィールドやコマンドラインで、 ファイルマスクとファイルフィルターの両方を指定する ことはできないことを思い出してください。
このセクションは、WinMerge ファイルフィルターの文法と、記述のためのガイドラインの提供について説明します。
コメント記号は、
##
です。
コメント記号の後にある、行内のすべての文字は無視されます。
WinMergeは、ルール中のほとんどの空白文字を無視します。
しかしながら、通常は、コメントの前に1つか複数の空白文字(スペースかタブ)が置かれるでしょう。
ルール中で、
##
を文字列として使用するには、後ろの空白文字を取り除いてください。
ファイルフィルターで、まずはじめに必要な2行は:
ファイルダイアログに表示されるフィルター名です
適用されるフィルタータイプです。次の値のうち、1つを指定してください:
指定されたルールにマッチしたアイテム以外はすべて含めます。
指定されたルールにマッチしたアイテム以外はすべて除外します。
exclude メソッドを選択した時は、サブフォルダーを指定する d(ディレクトリ)ルールも追加しなければなりません。 このように、すべてのサブフォルダーを指定するのは、通常良いアイデアです:
d: \\*$ ## Subfolders
これらの用語で混乱しないでください。ファイルフィルターの includeルールは、「何を含めるか」を指定するわけではありません。 「何を含めない」かを指定します。 同様に、excludeルールは、「何を除外する」かを指定するわけではありません。 「何を除外しないか」を指定します。
次に、フィルターファイルは、1つ以上のフィルタールールを含むべきです。 あなたは、たくさんのルールを好きなだけ追加できます。 1行には1つのルールがあるべきで、それぞれのルールは、 それぞれ1行にあるべきです(ルール中での改行は許可されません)。 (訳注: 回りくどいですが、「ルールは1行で記述してください」ということです。) それぞれのルールは、タイプデザイナー f:か d:を含み、その後に、正規表現が続きます:
regexp
ファイルにマッチ、または、
regexp
フォルダーにマッチ
2.16.19 以降、 f: と d: でマッチしたファイルまたはフォルダーの一部を除外するためのタイプデザイナー f!: と d!: が使用できます。
多くの正規表現の特殊文字の中で、次の文字は、ファイルフィルターでは特に重要です:
ルールが正しく動作するために頻繁に必要になります。
ルールが正しく動作するために頻繁に必要になります。例えば:
\.c$ ## 拡張子c
のファイルのみにマッチします。 \.c ##cpp
やcom
のような、拡張子がc
で始まるファイルにマッチします。
通常の文字を、特殊文字にマッチさせるために使います。
例えば、フォルダー名にマッチするために、
フォルダー区切り文字のバックスラッシュの前に、
バックスラッシュを置きます(\\
)。
ファイル名中のドットにマッチするために、
バックスラッシュを指定し、その後にドットを置きます(\.
)。
特殊文字やワイルドカードは、ファイル名とマッチさせるためには、使用されません。 ある型のすべてのファイル名にマッチするためには、単にファイル名を省略します。
ルールは、大文字・小文字を区別しません。例えば、
f: \.bat$
は、
winmerge.bat
と
compare.BAT
にマッチします。
例3 ファイルフィルタールールの例
シンプルなファイルフィルタールール:
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*.*
ファイル
ファイル比較で単一行を無視するために、行フィルターを使用することができます。 例えば、コメント、生成されたコードの決まった型や、 バージョン管理システムのタイムスタンプの様なものを無視するために、 行フィルターを使うかもしれません。各行フィルターは1つのルールです。 ファイル比較のために、たくさんの行フィルターを使用することができます。
フィルターの追加、編集、管理については、 「フィルターダイアログの使用」を参照してください。
次の方法で、行フィルターを適用することができます:
ファイルまたはフォルダーの選択ダイアログから、 ファイル比較を起動する場合
1(左)と 2(右)のファイル選択後、 フィルターフィールドの隣の をクリックしてください。
フィルターダイアログで、使用したい行フィルターを有効化するため、 また、現在どの行フィルターが有効かを確認するには、行フィルタータブを使います。
フィルターフィールドは、 どの行フィルターが有効化されているかを表示しません。
ファイル比較操作を続けてください。 操作を開始した時に、有効化された行フィルターが適用されます。
既に、ファイル比較操作を起動後 (違うフィルターを適用した、または、フィルターを無効にしてしまった時など)は、
→ をクリックしてください。
ファイルフィルタータブを開いてください。
あなたが適用したい行フィルターの行にチェックしてください。 また、適用したくないフィルターは、チェックを外してください。
、 、 ボタンを使用して、 フィルターを追加、編集、削除することもできます。
行フィルター機能を有効にするには、 行フィルターを有効にするにチェックしてください。 行フィルター機能を無効にするには、チェックを外してください。
をクリックして、 ファイルフィルターダイアログを閉じてください。
F5を押下して変更を適用し、 ファイル比較ウィンドウをリフレッシュしてください。
行フィルターは、行フィルタールールが有効化されている場合、 比較ファイル中の単一行の差異毎に評価されるルールです。 単一行の差異にルールがマッチした時、その差異は無視されます。
無視された差異は、ファイル比較ウィンドウ中では、 無視された差異の色(WinMergeオプションの色ページで定義されている) でマークされます。 これは、その他のタイプと無視された差異を区別できるようにします。 しかし、無視された差異は、選択やマージすることができません。
行フィルターマッチは、2つの考えに基づいて記述されるかもしれません:
ルールが、行のある部分にマッチした時、差異全体が無視されます。 つまり、行の一部だけをフィルターすることはできません。 例えば、2つのファイルに、次の単一行の差異があると仮定した場合:
File1:
# Jean Sibelius
File2:
# Janne Sibelius
フィルターなしの場合、行は差異として検出されます。
しかし、行フィルターを
^#
の式とともに適用する場合、その行は同一であると評価されます。
なぜなら、式は、両方のファイルにマッチする最初の文字のみを指定しているからです。
ルールは、すべての行にマッチした場合に、複数行差異に適用されます。 例えば、次の2行の差異を考えてみてください:
File1:
# Jean Sibelius # Pekka Himanen
File2:
# Janne Sibelius Pekka Himanen
同じ
^#
ルールは、1行目にマッチしますが、2行目にはマッチしません。
したがって、差異は無視されません。
パターンの正確さを制御するために、
行頭(^
)と行末($
)
記号を使用することは、大抵、良い習慣です。
なぜなら、式が、行のある部分にマッチした場合に、
ルールが適用されるからです。
例4 行フィルターサンプル
^MYTAG$
厳密に、
MYTAG
にマッチする行をフィルターします
^::
::
で始まる行をフィルターします
^/\*.*\*/$
で始まり、
/*
*/
で終わる行をフィルターします
^[1-5]00
数字の、100、200、300、400、500 で始まる行をフィルターします
例5 CVS の Id 行にマッチする行フィルタールール
CVS の Id 行は、次の様なものです:
// $Id: Filters.xml 7591 2013-01-20 15:47:42Z christianlist $
そしてこれは、次のルールでフィルターできます:
^// \WId: .*\$
このセクションは、ファイルフィルターと行フィルターの作成・管理機能を提供する、 フィルターダイアログの説明をします。
フィルターダイアログを開くには、次の何れかの方法を使用してください:
ファイルまたはフォルダーの選択ダイアログで、 選択ボタンをクリックしてください。 フォルダー比較用のファイルフィルターを適用したい時は、方法を使用してください。
フィールドの右にある、→ をクリックしてください。 この方法は、ファイルまたはフォルダーの選択ダイアログを開いている時以外に使用可能です。
フィルターダイアログには、それぞれの WinMergeフィルター用のタブがあります:
フォルダー比較用のファイルフィルターを設定するには、このタブを選択してください。
ファイル比較用の行フィルターを設定するには、こちらのタブを使用してください。
Choose this tab to work with substitution filters for file compare operations.
このタブの主要部分は、フォルダー比較用に利用可能なファイルフィルターの一覧です。 このリストは、共有、個人、そして、 「ファイルフィルターの場所」で説明されている、 WinMergeが知り得るインストール済みのファイルフィルターを含んでいます。
ファイルフィルターが、フォルダー比較操作で、それを有効にすること、 また、フィルターが使用され始めてから、 現在のフィルターを止めるために無効にすることを可能にしなければなりません:
まだ、フィルターダイアログを開いていない場合は、開いてください
ファイルフィルターを選択、もしくは、リストから
を選択しくてださい。をクリックして、 フィルターダイアログを閉じてください。
ファイルフィルターを有効にした後でそれらを適用する方法が、いくつかあります。 詳細は、 「ファイルフィルターの適用」を参照してください。
ファイルフィルターリストの管理と フィルターの新規作成には、これらのボタンを使用してください:
フィルターがどのように動作するか素早く確認するには、 リスト中のファイルフィルターを選択し、 「ファイルフィルターのテスト」を参照してください。
をクリックしてください。 詳細は、ファイルフィルターを配置し、フィルターリストへ追加することができます。 ファイルフィルターは、それらをインストールしない限り、 共有フォルダー、デフォルトのプライベートフォルダーのどちらでも検出されません。
共有フォルダーかプライベートフィルターフォルダーのどちらかに、 ファイルテンプレートの新しいコピーを作成します。 「ファイルフィルターの作成」で説明されているように、 テンプレートを編集、ルールの追加を行ってください。
デフォルトエディターでファイルを開くには、リスト中のファイルフィルターを選択し、
をクリックしてください。ファイルを削除しリストから取り除くには、 リスト中のファイルフィルターを選択し、
をクリックしてください。 これで、本当にファイルは削除されました。をクリックして、 フィルターダイアログを閉じた時、変更は保存されます。 行フィルターは、Windowsのレジストリに保存されます。
WinMergeにインストール済のファイルフィルターが、 お望みのフィルターを提供していないなら、あなた自身で作成することができます:
選択ボタンをクリックしてください。
→ をクリックしてください。 または、ファイルまたはフォルダーの選択ダイアログから、 フィールドの右にある、共有/プライベートフィルターダイアログで、 共有フィルター、または、 プライベートフィルター (これらを何に使用するかは、 「ファイルフィルターの場所」を参照してください)を選択し、 OKをクリックしてください。
お使いのシステムの共有、または、プライベートフォルダーが、 「新しいフィルターのファイル名を指定してください」ダイアログに開きます (プライベートフォルダーが存在しない場合は、WinMergeが作成します)。
「新しいフィルターのファイル名を指定してください」ダイアログで、 ファイル名を入力し
をクリックしてください。既存のファイル名を選ばないでください: 既存のファイルを編集するには、 2に戻って、 「新規」の代わりに、「編集」をクリックしてください。
WinMergeは、新しいファイルを、テンプレート:
FileFilter.tmpl
を用いて作成し、
デフォルトのテキストエディターでそれを開きます。
テンプレートの編集は、テンプレートの指示に従って、 プレースホルダー名と説明の更新、 「ファイルフィルターの文法」で説明されている、 フィルタールールの追加を行ってください。 テキストエディターでファイルを保存してください。
あなたが作成中のルールを、素早くテストしたい場合は、 フィルターダイアログの「テスト」ボタンをクリックしてみてください。 詳細は、「ファイルフィルターのテスト」を参照してください。
標準の
フィルター
フォルダーに
、ファイルフィルターを作成したにも関わらず、
フィルターダイアログがその新しいファイルフィルターを表示しない場合は、
一度、 をクリックしてダイアログを閉じてください。
次に、
→ をクリックし、再度ダイアログを開いてください。
ファイルフィルターリストは、
新しいファイルフィルターを含んでいるでしょう。
お使いのシステム上の、別の場所にファイルを保存した場合、 あなたがインストールしない限り、WinMergeは、それを検出することができません。 システム上のどこかにあるファイルフィルターを検出させるには:
フィルターダイアログの
をクリックしてください。
「インストールするファイルフィルターの位置」ダイアログで、システム上の
flt
ファイルを選択し、
をクリックしてください。
ファイルフィルターリストは、インストールされたファイルフィルターを含んでいるでしょう。
新しいルール作成や既存のルールの理解を補助するため、 サンプルデータに対し素早くファイルフィルターをテストするには、 テストフィルターダイアログを使用してください。 それは、フルで比較操作を走らせるより簡単です。
フィルターダイアログから始めます:
ファイルフィルタータブで、テストしたいファイルフィルターを選択してください。
テストするルールを確認したい場合は、
をクリックしてください。 ファイルが開き、次のステップの間、内容を確認することができます。をクリックしてください。
フィルターのテストダイアログで、テストするルールの型を選択してください:
ファイルフィルター中のファイルルール、 f:をテストするには、 フォルダー名オプションのチェックを外してください。
フォルダールール、 d:をテストするには、 フォルダー名オプションにチェックを入れてください。
テスト用のテキストを入力してください。
テキストは、テストするルールの型に適したものであるべきです。 例えば、フォルダー名オプションをチェックした場合、 あなたは「\temp」の様なフォルダー名を入力したいでしょう。
結果欄は、入力したテキストを、
次のどちらかのステータスと共に表示します:
passed
、または、
failed
。
ファイル比較用の行フィルターの設定と有効化には、このタブを使用してください。 タブは、ルールの一覧を持っています。それぞれのルールは、1つの正規表現を含みます。 ファイル比較用に、リストから複数のルールを組み合わせて適用することができます。
下の 正規表現リストには、 いつでもルールの追加、編集、削除に使うことのできる、編集欄とボタンがあります。
新しいルールを追加するには:
ボタンをクリックしてください。 カーソルが自動的に編集欄へ移動します。
正規表現リストの下にある、編集欄に式を入力してください。
をクリックし、リストへ式を読み込んでください。
既存のルールを編集するには:
行を選択し、
をクリックしてください。編集欄の式を編集してください。
編集が完了したら、
をクリックしてください。ルールを削除するには、ルールを選択(チェック)し、
ボタンをクリックしてください。正規表現リストで、 適用したいフィルターにチェックを入れ、適用したくないフィルターはチェックを外すだけです。
行フィルターを有効にするオプションに チェックを入れるか、外してください。 行フィルターを有効にした場合、 正規表現リストで、現在チェックされているすべてのルールが使用されます。 行フィルターを無効にした場合、たとえそれらがチェックされていても、ルールは使用されません。
をクリックして、フィルターダイアログを閉じ、設定を保存してください。
それらを有効にした後にファイルフィルターを適用する、いくつかの方法があります。 詳細は、 「行フィルターの適用」を参照してください。
正規表現は、非常に複雑になり得ます。幸い、WinMerge のほとんどのファイルフィルターは、このトピックの例からもわかるように、シンプルな範囲の表現です。 WinMergeと共にインストールされるフィルターファイルは、多くの役に立つ例を含んでいます。
最後に、Web上には、正規表現を手助けする、これらのサイトを含むたくさんの情報源があります: