(diffの出力に依存して解釈するvimdiffを使ってこの問題にぶつかったのでdiffの問題だと思います。)
これらのファイルが与えられると、最初のファイルは2行、2番目のファイルは4行になり、diff(GNU 3.3)はファイル全体を表示します。
< 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 12.99
< 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 37.44
---
> 09/02/2014 | Expenses : Advertising | Closed | | 12.99 | 12.99
> 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 0.00
> 09/03/2014 | Expenses : Advertising | Closed | | 24.45 | 24.45
> 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 0.00
これによりvimdiffは共有されたコンテンツがほとんどないと思うようになります。下の画像の上部に示すように、1行目の最初の13文字、2行目の最初の4文字を一致させ、3行目と4行目を新規に処理します。
この場合、diff(したがってvimdiff)が下の画像の中央に表示されるように挿入された行の代わりに改行文字を追加するのに多くの時間を費やしました。
vimdiffがこの部分を画像の下に処理するようにdiffからそれをよりよく分離する方法はありますか? (私はPhotoshopにしました。)
上記のように、1つではなく4つの部品が必要です。それは次のとおりです。
#,#c#,#
---
> 09/02/2014 | Expenses : Advertising | Closed | | 12.99 | 12.99
#,#c#,#
< 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 12.99
---
> 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 0.00
#,#c#,#
---
> 09/03/2014 | Expenses : Advertising | Closed | | 24.45 | 24.45
#,#c#,#
< 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 37.44
---
> 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 0.00
参考までに、vimdiffはさまざまなdiffオプションと一緒に使用できますが、デフォルトのdiffexpr
スタイルed
diffが必要です。
そのため、diffが同じセクションで変更された行と挿入された行を混在させないようにする方法を探しているようです。
答え1
しばしば効果がある1つのアプローチは、以下を追加することです。コンテキスト、小さな隣接差がより凝集力のあるディスプレイとして収集されます。
- コマンドラインから
diff
、この-C
オプションを使用してこれを実行できます。 - そして
vimdiff
、あなたはそれを使用することができますdiffopt
たとえば、設定とcontext
機能は暗黙的なデフォルトです。
diffopt=padding 設定、コンテキスト: 6
たとえば、変更できます。
diffopt+= コンテキスト設定:9 diffopt=padding 設定、コンテキスト: 9
さらに:
- デフォルト
diff
ユーティリティには、行が互いに変更されたかどうかを検出する方法はありません。 - また、特定の列を無視しながらファイルを比較する方法もありません。
与えられた例は、日付別にソートされた一連の取引のようです。他のソート(変更されていない行のより大きなブロックを生成する傾向がある)がある場合は、データを並べ替えると便利です。
原則として、できる使用diffexpr
特定の列のみを比較するためにデータを前後に処理するスクリプトを設定して作成します。その方法を使用しました。すぐに戻ってください。自由形式(フォントレベル)比較のためのユーティリティです。ただし、これを行うにはかなりの作業が必要です。diffは入力列を無視できないため、マイナーではありません。