8

標準の差分ツールは、ファイル内の異なる行を見つけるのに非常に便利ですが、文字ごとの違いにはうまく機能しません。異なるコンピュータで同期せずに変更されたテキスト (つまり、コードではなく、書かれたテキスト) を 1 文字ずつマージする必要があることがよくあります (はい、そうすべきではないことはわかっていますが、とにかく起こります)。パラグラフを 1 つか 2 つ追加する以外に、以前は両方のファイルに共通していたコンマ、スペルミス、またはテキスト内のその他の小さな変更を変更した可能性があります。

差分はどの行が変更されたかを教えてくれますが、行ごとに複数の差分がある可能性があるため、行を注意深くスキャンして、行ごとに物理的に小さいが重要な差分を見つける必要があります。修正後、差分を繰り返して、編集を見逃していないことを確認する必要があります。行が段落形式 (つまり、段落ごとに 1 行) である場合、および多くの連続する行がこのようなわずかな違いしかない場合は、さらに悪化します。

現時点では、通常は両方のファイルを Microsoft Word にロードして、組み込みの diff 関数を使用していることを認めなければなりません。もちろん、Word のような巨大なパッケージを起動して小さな違いを見つけるのは不便ですが、少なくとも文字単位でファイルを比較します。

私が本当に望んでいるのは、これを行う Unix の方法です。テキストの文字ごとの比較を行う、つまり行ベースではなく、行末を無視でき、賢明な ascii-art によって報告し、コマンドラインからスクリプトで使用するために完全にパイプ可能である、小さくてかわいいツールまたはスクリプト?

これには別の質問があります。Using 'diff' (or anything other) to get character-level diff between text files ですが、その質問は Web ベースのツールで例示された lib によって満たされました。コマンドで何かを好むでしょう-ライン。

4

2 に答える 2

5

これが「コマンドライン」の基準を満たすかどうかはわかりませんが、この目的のためにgvim/を毎日使用しています。vim

  1. 次のように、差分を取得するファイルを開きます。

    gvim -d file1 file2
    
  2. ウィンドウをフルスクリーンにして見やすくする

  3. 次のコマンドを使用して、内側の分割ウィンドウをgvim同じサイズにします: C-w =(それは Control+W の次に=)

  4. 段落形式の行をよりよく表示するには、 を入力してから(またはマウスクリックで):set wrap別の分割ウィンドウに切り替え、そこでも入力します。C-w w:set wrap

  5. 変更間を移動するには、 と を使用[c]cます。変更をマージするには、dp("diff put") とdo("diff gets/get") を使用します。

違いのある行は強調表示され、行内の違いも別の色で強調表示されます。これがあなたが必要とすることを願っています。gvimあるファイルから別のファイルへのマージなど、さらに多くのことができます。:help diffコマンド( 内)で詳細を確認できますgvim

試してみることもできます。kdiff3学ぶよりも簡単かもしれませんvim

于 2013-10-06T14:31:00.287 に答える
0

コマンドラインではありませんが、最も近いのは janos による vimdiff の回答です。

サポートが充実しており、主要なディストリビューション (Debian や Cygwin など) に含まれており、コマンドラインでパイプ可能であり、行末を無視できる代替手段はwdiff. wdiff標準の diff とほとんど同じように使用できます。残念ながら、これは文字ベースではなく、単語ベースです。

人間が使用するにwdiffは、おそらく十分に近いです。単語内の 1 文字の不一致をすばやく簡単に見つけることができます。主な欠点は、目的が単一の文字を見つけることである場合、プログラムやスクリプトで使用できないことです。

サポートされているコマンドライン文字ベースの diff は実際には存在しないようです :-(.

于 2013-10-12T14:48:37.693 に答える