2011-01-28 38 views
8

2つのアセンブリファイルを比較しようとしています.1つはすべて大文字で、もう1つは小文字で書かれています。多くの行は、大文字と小文字の区別がありません。gVimのvimdiffで大文字小文字を無視する

差分モードの二つのバッファながら、私は、次のことを試してみました:

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

空白事がうまく動作するようだが、無視する場合は、その作業を行いません。例えば、次の2つの行で:

  I0=R0;    // ADDRESS OF INPUT ARRAY 

    i0 = r0;   // address of input array 

なぜ[最初の行は、単一のタブと第、12個のスペースで始まりますか]?私に何ができる?

UPDATEは:

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

「diffotp」内の最後の2文字の転置が問題であるか、writi中の誤字だけです質問ですか? –

+0

これはタイプミスです。訂正してくれてありがとう。 – ysap

+0

関連:[vimdiffをすべての空白を無視するように設定する方法はありますか?](http://stackoverflow.com/q/1265410) –

答えて

7

あなたの比較ではないので、場合によって、理由空白の障害が発生している:ちょうどこの2行にすべての違いはOK無視されたことに気づきました。これは、iwhiteオプションを使用すると、バックグラウンドでvimdiffがdiff -bを実行しているため、探しているものよりも空白を比較する方法が制限されているためです。より具体的には、-bオプションは、すでに空白があるがある空白の量の差を無視します。あなたの例では、i0 = r0;にはI0=R0;と異なるフラグが設定されています。これは、文字の間に空白が含まれていて、もう1つは含まれていないからです。

vimdiffのドキュメントによれば、diffexprを空でない値に設定すると、iwhiteオプションのデフォルトの動作を上書きできます。あなたが興味を持っているdiffフラグは--ignore-all-spaceです。これは空白についてもっと柔軟です。あなたは次のように代わりにデフォルト-bオプションのこのオプションを使用することはvimdiffでdiffexprを変更することができます。

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

+1

答えに感謝します。 1行目に空白がないことについてのあなたの見解は完璧な意味を持ちます。さて、問題は ':'プロンプトで単純な(たぶん1本のライナーかもしれない)コマンドを使って '--ignore-all-space'の機能をどうやって達成できるのでしょうか?あなたの関数を読んで、if-endif構造体が本当に必要ないと思います。ですから、コマンドプロンプトから '--ignore-all-space'を実行して、既存のオープンバッファで作業していますか? – ysap

3

後、私に適しています:

関連する問題