74

vim -d file1 file2それらの違いを確認するために使用しています。これは問題なく動作しますが、空白の変更は無視したいと思います。空白の変更はソース コード ファイルには関係ありません。

Vim のヘルプでは、次のコマンドが魔法のように機能することが示されています。

set diffopt+=iwhite

残念ながら、このコマンドは-bdiff ツールのコマンド ラインに追加するだけであり、末尾の空白を無視するだけです。-wすべての空白の変更を無視するには、diff の正しいコマンド ライン キーはにする必要があります。しかし、Vim から直接 diff コマンド ラインを変更する方法が見つかりません。もちろん、カスタム diff をコンパイルしたり、diff を diff.sh に置き換えたりすることはできますが、それは見栄えが悪い :(.

ファイルの違いを表示するために、Vim が diff ツールと対話する方法を変更するより良い方法はありますか?

4

5 に答える 5

39

これはあなたが望むものを実装します(変更されたdiffexprドキュメントから取得):-b-w

set diffopt+=iwhite
set diffexpr=DiffW()
function DiffW()
  let opt = ""
   if &diffopt =~ "icase"
     let opt = opt . "-i "
   endif
   if &diffopt =~ "iwhite"
     let opt = opt . "-w " " swapped vim's -b with -w
   endif
   silent execute "!diff -a --binary " . opt .
     \ v:fname_in . " " . v:fname_new .  " > " . v:fname_out
endfunction

...どの行がどの行にマップされるかに関して、より優れた diffexpr ヘルパーをまだ探しています( GNU diff-wは、代わりに を使用しても、-b余分な空白とコメント行などのマイナーな編集を組み合わせることでかなり困惑しています)。多分diffchar

于 2010-11-24T20:29:58.723 に答える
33

はい。iwhiteあなたがしたようにオプションを設定しますが、さらにdiffexpr空にします。

vim docsの関連セクションから:

アイホワイト

空白の量の変化を無視します。「diffexpr」が空の場合、「-b」フラグを「diff」コマンドに追加します。これが正確に何をするかについては、「diff」コマンドのドキュメントを確認してください。末尾の空白の追加は無視されますが、先頭の空白は無視されます。

を設定することで、カスタム diff コマンドラインを提供できることにも注意してくださいdiffexpr。特に、 vimdiff man ページの議論を参照してください。

「diffexpr」オプションを設定すると、標準の「diff」プログラム以外の何かを使用して 2 つのファイルを比較し、違いを見つけることができます。

'diffexpr' が空の場合、Vim は次のコマンドを使用して file1 と file2 の違いを見つけます。

diff file1 file2 > outfile
于 2009-08-12T11:37:50.053 に答える
19

ありがとう、それは私を助けました。~/.vimrc にこれ (Adam K によって提案されたものより単純なもの) を含めるだけで済みます。

set diffopt+=iwhite

set diffexpr=""

そしてそれはそれを行います...それは私が知っている中で最も強力な差分ツールであり、他のどのツールよりもはるかに優れています。

于 2012-10-29T10:51:41.797 に答える
0

「無効な引数」を実行している場合は、次のようなものを使用set diffopt+=iwhiteせずに試してください。+

set diffopt=iwhite

ただし、より堅牢なアプローチは、既存のオプションを保持しながら空白を無視するように設定することです。ただし、「無効な引数」エラーは、サポートされていない既存のオプションのいずれかが原因である可能性が高いことに注意してください。私の場合、それは「内部」オプションだったので、次の順序でオプションを設定する必要がありました。

set diffopt-=internal
set diffopt+=iwhite

または、以下を .vimrc に追加してください:

if &diff
    set diffopt-=internal
    set diffopt+=iwhite
endif

https://www.micahsmith.com/blog/2019/11/fixing-vim-invalid-argument-diffopt-iwhite/へのクレジット

于 2021-08-31T20:10:00.483 に答える