開発者ツール · テキスト比較
すべての行が変更されましたか?差分内の行末、末尾のスペース、および BOM
· 仕組み
テキストの差分 行末 デバッグ
すべての行が異なるものとして報告される比較の 3 つの目に見えない原因を診断し、作成者を責める前にどれであるかを判断する方法を示します。
同じファイルが 2 回保存され、明らかに書き換えられた — 2 つのオペレーティング システムで編集されたファイルの一般的なケースを設定します
エディターが非表示の文字を変更すると、2 つの保存が書き換えのように見えることがありますが、ToolAcre の動作はどの文字が変更されたかによって異なります。照合する前に行末を正規化しますが、行端のスペースと先頭の U+FEFF は、別のオプションでキーが変更されない限り、通常の行内容のままです。
色から推測するのではなく、診断フィクスチャを構築します。末尾のみが異なる 1 つのペア、末尾のスペースが異なる 2 つ、および先頭の BOM を持つ 3 つ目のペアを比較します。制御されたペアは、一度に複数の目に見えない変更を含む実際のファイルよりも確実にツールの境界を明らかにします。
CRLF と LF: 各行末の文字 — Windows では行が 2 文字で終わるのに対し、Unix では 1 文字で終わる理由と、diff で余分な復帰がどのように認識されるかについて説明します。
`splitLines` は CRLF と単独の CR を LF に置き換えてから分割します。テストにより、3 つの規則すべてが同じ配列を生成することが確認されています。したがって、空白スペースを無視がオフの場合でも、CRLF のみの違いは表示されません。すべての行が異なるというアウトラインの主張は、この実装と矛盾します。
最後の改行でも余分な行は作成されません。分割後、端子の空きエントリが 1 つ削除されます。中央の本物の空行は比較単位のままであるため、この動作では、ファイル終了規則と文書内の意図的な垂直方向の分離が区別されます。
ToolAcre は比較前に CRLF、CR、LF を正規化するため、エンディングのみの変更は消えます
末尾のスペースは元の行に残ります。通常の比較では、`name=value` と `name=value ` は異なるキーを持ちます。 [空白を無視] を選択すると、両端がトリムされ、内部ランが折りたたまれます。そのため、このオプションにより、表示された等しい行の左側の元のテキストを保持しながら、ペアを一致させることができます。
このライブラリは、より狭い `ignoreTrailingWhitespace` オプションも実装していますが、現在の UI はそれを公開していません。記事には、ユーザーが選択できないチェックボックスを記述してはなりません。出荷されたパネルには、大文字と小文字を無視する、すべての空白の違いを無視する、および長期間変更されていない実行を折りたたむ機能があります。
ファイルの先頭にあるバイト オーダー マーク — 一部のエディターが UTF-8 ファイルの先頭に追加する U+FEFF 文字と、最初の行だけが異なる理由を説明します。
JavaScript テキストにデコードされた UTF-8 バイト オーダー マークは、最初の行の先頭が U+FEFF です。 `splitLines` には明示的な BOM 削除がありません。通常のマッチングでは、その文字によって最初の行のみが異なり、後の行は等しいままになります。
JavaScript の空白操作では、空白を無視するが `trim` を呼び出すときに U+FEFF を空白として扱うことがありますが、この記事ではそれをファイルのデコード動作に一般化するものではありません。エディターは文字列を受け取ります。ファイルのバイトを読み取ったり、エンコーディングを報告したりしません。バイトレベルの出自が重要な場合は、実際の文字を検査します。
実践例: 3 つの原因を区別する — 決定パスを与える: 最初の行のみの違いは BOM を指し、すべての行は末尾を指し、散在する線は末尾のスペースを指す
`alpha beta` と `alpha beta` から始めます。結果は同じです。次に、`alpha beta` と `alpha beta` を比較します。通常モードは置換行を報告しますが、空白モードはそれらに一致します。最後に、一方の側のアルファに U+FEFF を接頭辞として付け、最初の行の効果を観察します。
このシーケンスは、リポジトリで実証された操作を使用して原因を分離します。正規化を終了した後も各行が異なる場合は、CRLF だけを責めるのではなく、内容、インデント、または末尾の文字を調査してください。 1 行目のみが異なる場合は、ファイル全体を書き換える前に、その先頭のコード ポイントを調べてください。
診断としてホワイトスペース オプションを使用する — ToolAcre のテキスト比較でホワイトスペースの無視を有効にすることで、末尾のスペースと行末ノイズを吸収し、実際の編集を目立たせることができる方法を示します。
空白を無視すると、行キーがトリミングされて圧縮されるため、末尾のスペース ノイズに役立ちます。 CRLF と LF を隠す責任はありません。それは分割中にすでに起こっていました。これらの段階を分離しておくと、どのオプションが比較を修復したかについて誤解を招く結論が得られるのを防ぎます。
トリミングすると意味のあるインデントが隠れる可能性があり、圧縮すると固定幅の値や文字列リテラルが変更される可能性があるため、両方のビューを実行してください。静かに正規化された結果は、キーがその変換の下で一致することを示します。元のファイルがバイト同一であること、または意味的に交換可能であることは保証されません。
ホワイトスペース モードは末尾のスペースを診断しますが、行末はすでに正規化されています
Text diff は、ファイルの変換、Git の構成、エディター設定の変更、または 16 進バイトの公開を行いません。貼り付けられた文字列を受け入れ、行の操作を報告します。 `.gitattributes`、`core.autocrlf`、またはエンコード修復に関するアドバイスは、動作を個別に検証できるツールに属します。
このツールは、非表示の文字がテキストにどのように入力されたかを区別することもできません。フォーマッタ、クリップボード、デコーダ、または手動編集により、同じ文字列が生成される場合があります。比較を使用して行を特定し、原因を割り当てる前にソース パイプラインを検査します。
要点: 作成者を責める前に、目に見えないものを確認してください — 診断パスを要約し、ブラウザ内で比較が実行されるため、機密ファイルがマシン上に残ることを示しています。
固定の順序 (末尾、末尾または内部の空白、先頭の特殊文字) で非表示をチェックします。 ToolAcre のテストでは、最初のカテゴリについて確実な結果が得られ、そのオプションは 2 番目のカテゴリを分離するのに役立ちます。 3 番目のルートでは、このルートの外にキャラクター インスペクターが必要になる場合があります。
ブラウザ側の行分割により、プラットフォーム間の終了の違いが設計上解消されます。これは便利ですが、このツールでは 2 つのソース ファイルが同じ物理改行バイトを使用していることを証明できないことも意味します。正確なワイヤまたはリポジトリ表現を保持することが要件である場合は、バイト対応ユーティリティを選択してください。