行内のより詳細な比較


17

vimdiffはファイル間の違いを検査するために使用し、時々それが少し見逃します。たとえば、次の2つのファイルがある場合:

//a.c
printf("Hello\n");

そして:

//b.c
int i = printf("hello\n") + 3;

それらを表示することはvimdiff与える:

ここに画像の説明を入力してください

私が見たいのは、bc hでは大文字ではないということです。

vimdiffにその一部だけを比較するように指示する方法はありますか(その行で)(つまり、int i =とを無視し+ 3ます)?


4
diffcharのプラグインは何が必要でしょうが、私はそれでゼロ経験を持っています。たぶんそれを使った経験のある人が、きめ細かい詳細な答えを出すことができます(あるいは別の方法)
とこやみ

回答:


15

これはVim自体ではできないと思います。:h view-diffs(強調鉱山):

hl-DiffText DiffText変更された行内の変更されたテキスト。  Vim
                                異なる最初の文字を見つけ、
                                異なる最後のキャラクター
                                (行末から検索)。  の
                                間のテキストが強調表示されます。  これの意味は
                                まだ中間にある部分
                                とにかく同じものが強調表示されます。  「iwhite」のみ
                                ここでは「diffopt」が使用されます。

常夜味の提案は、私たちに一歩近づきます。インストールdiffchar(プラグインオートローダーを使用している場合はGithubリンク)。プラグインを有効にしたv4.7以降、Vimはより正確な違いを自動的に表示します。

ここに画像の説明を入力してください

  • F7(デフォルトのキーマップ)を押して、通常のプラグインとプラグインを切り替えることができます。再割り当て:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    <key>適切なキーコードに置き換えます。

  • より多くの色を使用できます:

    let g:DiffColors=100
    

+1ですが、「一歩近づいた」というのは私にとっては保守的すぎるようです。Diffcharはこの問題IMOを完全に解決します。
-Sparhawk

@Sparhawkよく、それは行の一般的な要素を無視しません(OPは強調表示された変更のみを必要とします)
muru

理解したかどうかはわかりません。この例で一般的な要素は無視されていませんか(例printfand ello)?
スパラフーク

1
この例の@Sparhawk、はい。しかし、より複雑な変更では、すぐに面倒になります。
ムル

ああ、それでは少しバグが多い…情報をありがとう。
スパラフーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.