13

1 つはすべて大文字で、もう 1 つは小文字で書かれた 2 つのアセンブリ ファイルを比較しようとしています。多くの行は、大文字小文字と空白まで同一です。

差分モードで2つのバッファを使用しながら、次のことを試しました:

:set diffopt+=icase
:set diffopt+=iwhite
:diffupdate

空白の問題はうまく機能しているように見えますが、ignore ケースは機能しません。たとえば、次の 2 行では次のようになります。

            I0=R0;              // ADDRESS OF INPUT ARRAY

    i0 = r0;            // address of input array

[最初の行は 12 個のスペースで始まり、2 行目は 1 つのタブで始まります]

なんで?私に何ができる?

更新: これらの 2 行では、すべての違いが無視されていることに気付きました。

                                // MULTIPLY R1 BY 4 TO FETCH DATA OF WORD LENGTH
                        // multiply r1 by 4 to fetch data of word length
4

2 に答える 2

8

大文字と小文字が原因ではなく、空白が原因で比較が失敗しています。これが発生しているのは、このiwhiteオプションをバックグラウンドで使用すると、vimdiffが実行しdiff -bているため、探しているものよりも空白を比較する方法が制限されているためです。より具体的には、このオプションは、すでに-b空白がある場合の空白の量の違いのみを無視します。あなたの例では、一方が文字の間に空白を含み、もう一方が含まないためとは異なるものとしてフラグが立てられています。i0 = r0;I0=R0;

vimdiffのドキュメントによると、空でない値にiwhite設定することで、オプションのデフォルトの動作をオーバーライドできます。diffexpr関心のあるdiffフラグはです。--ignore-all-spaceこれは空白に関してより柔軟です。次のようdiffexprに、デフォルトオプションの代わりにこのオプションを使用するようにinvimdiffを変更できます。-b

set diffexpr=MyDiff()
function MyDiff()
   let opt = ""
   if &diffopt =~ "icase"
     let opt = opt . "-i "
   endif
   if &diffopt =~ "iwhite"
     let opt = opt . "--ignore-all-space "
   endif
   silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
    \  " > " . v:fname_out
endfunction

詳細については、ドキュメントを参照してください。

http://vimdoc.sourceforge.net/htmldoc/options.html#%27diffopt%27

于 2011-01-28T17:10:41.097 に答える