2011-01-28 14 views
8

Biri tüm kapaklar ve diğeri küçük harfle yazılmış iki derleme dosyasını karşılaştırmaya çalışıyorum. Birçok satır, dava ve boşluk ile aynıdır.gVim'in vimdiff'i görmezden geliniyor

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

boşluk şey iyi iş gibi görünüyor, ama görmezden vaka çalışmasını yapmaz: diff modunda iki tamponlar ise

ben aşağıdakileri denedim. Örneğin, aşağıdaki iki satır içinde:

  I0=R0;    // ADDRESS OF INPUT ARRAY 

    i0 = r0;   // address of input array 

neden [ilk satır tek bir sekme ile ikinci, 12 boşluk ile başlar]? Ne yapabilirim?

GÜNCELLEME:

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

Son iki karakterin aktarımı sorununuzu "diffotp" veya yazım hatası olan bir yazım hatası olur mu? Soru nedir? –

+0

Bu bir yazım hatasıdır. Düzeltme için teşekkürler. – ysap

+0

İlgili: [ALL whitespaces yoksaymak vimdiff yapılandırmak için bir yolu var mı?] (Http://stackoverflow.com/q/1265410) –

cevap

7

Kişisel karşılaştırma değildir çünkü davanın, çünkü edilmiş boşluğa başarısız: sadece bu iki çizgi bütün farklılıklar Tamam gözardı fark ettim. Bu durum, arka planda, iwhite seçeneğini kullandığınızda, vimdiff, aradığınızdan daha fazla alanı karşılaştıran bir kısıtlama olan diff -b çalıştırıyor. Daha spesifik olarak, -b seçeneği, boşluklu alanın yalnızca boş alanı olduğu farkları göz ardı eder. Örneğinizde, I0=R0;'dan farklı olarak i0 = r0; farklı olarak işaretleniyor çünkü biri karakterler arasında boşluk içeriyor ve diğeri bulunmuyor.

vimdiff belgelerine göre, diffexpr değerini boş olmayan bir değere ayarlayarak iwhite seçeneğinin varsayılan davranışını geçersiz kılabilirsiniz. İlgilendiğiniz fark bayrağı, boşluklar konusunda daha esnek olan --ignore-all-space. aşağıdaki gibi varsayılan -b seçeneği yerine bu seçeneği kullanmak vimdiff içinde diffexpr değiştirebilirsiniz: Benim için iyi çalışmaları takiben

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

+1

cevabı için teşekkürler. 1. çizgide boşluk bulunmamasıyla ilgili gözleminiz mükemmel bir anlam ifade ediyor. Şimdi, soru '' '' komut isteminde basit bir (belki bir tane liner) komutuyla '--ignore-all-space' işlevini nasıl elde edebilirim? Fonksiyonunu okumak, sanırım eğer ne istediğimi/istediğimi bilirsem, if-endif yapıları gerçekten gerekli değildir. Öyleyse, her şeyden önce - açık-boş alan üzerinde çalışarak komut isteminden 'ignign-all-space 'yapılıyor mu? – ysap

3

:

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 

fazla ayrıntı için belgelere bakın

vimdiff +"set diffopt+=icase" file_1.txt file_2.txt 
İlgili konular