vimdiffには、始まりや終わりで共通の文字を共有するという理由だけで、ほぼ完全に異なる2行を同じ部分の別の行として表示する厄介な習慣があります。
たとえば、
foo.txt
含む: The quick brown fox jumps over the lazy dog
。含まれてbar.txt
:This is a completely different line
。
vimdiff foo.txt bar.txt
Th
先頭の強調表示を除くすべての項目と一緒にこれらの2行を並べて表示します。
この動作を無効にして別の行を別の行として表示する方法はありますか?
答え1
はい、可能です。コマンドを入力する
:hi! link DiffChange DiffText
答え2
いいえ、これは外部比較ツールによって報告された行の変更をさらに細分化するためのVim内部アルゴリズムの一部です。
オプションで影響を受けることができれば幸いですが、現在はそうではありません。 Vimのソースコードを修正し、独自の特別バージョンをコンパイルする必要があります。パッチを作成して送信してください。vim_devメーリングリスト? !
答え3
私はそれが「diff」コマンドの出力に依存していると思います。
":help diff-options"を実行すると、Vimが期待するdiff形式の例を見ることができます。
1a2
> bbb
4d4
< 111
7c7
< GGG
---
> ggg
The "1a2" item appends the line "bbb".
The "4d4" item deletes the line "111".
The '7c7" item replaces the line "GGG" with "ggg".
代替項目(例:7c7)の場合、vimdiffはそれを並べて配置し、hl-DiffChangeで色を付け(例:デフォルトでは紫色)、hl-DiffTextを介して行の他のテキストを強調表示すると考えました(例:私のデフォルトは赤です))。
たとえば、次の2つのファイルをvimdiffした場合:
ファイル1:
This is common1
This is common2
11111111111111122222222222222222222222222222222222222
This is common4
This is common5
ファイル2:
This is common1
This is common2
This is a completely different line
This is common4
This is common5
2つのファイルの3行目が完全に異なる場合でも、vimdiffはまだ2つのファイルを並べて配置します。
ハッキーな解決策は、目的の形式を生成するように変更された外部diffプログラムを使用することです。