2011-01-28 29 views
8

को अनदेखा करने के लिए gVim के vimdiff प्राप्त करना मैं दो असेंबली फ़ाइलों की तुलना करने की कोशिश कर रहा हूं जहां सभी को सभी कैप्स और दूसरे को लोअरकेस में लिखा गया था। कई रेखाएं केस और व्हाइटस्पेस के समान होती हैं।केस

मैं निम्नलिखित की कोशिश की, diff मोड में दो बफ़र होने पर:

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

खाली स्थान के बात अच्छी तरह से काम करने लगता है, लेकिन उपेक्षा मामले अपना काम नहीं करता है। उदाहरण के लिए, निम्नांकित दो पंक्तियों में:

  I0=R0;    // ADDRESS OF INPUT ARRAY 

    i0 = r0;   // address of input array 

[पहली पंक्ति, 12 रिक्त स्थान के साथ शुरू होता एक टैब के साथ दूसरे]

क्यों? मैं क्या कर सकता हूँ?

अद्यतन: सिर्फ देखा है कि इन दो पंक्तियों में सभी मतभेदों को ठीक नजरअंदाज कर दिया गया:

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

क्या आपकी समस्या में पिछले दो वर्णों की पारदर्शिता आपकी समस्या है या केवल एक टाइपो जबकि writi सवाल है? –

+0

यह एक टाइपो है। सुधारों के लिए धन्यवाद। – ysap

+0

संबंधित: [क्या सभी व्हाइटसाइट्स को अनदेखा करने के लिए vimdiff को कॉन्फ़िगर करने का कोई तरीका है?] (Http://stackoverflow.com/q/1265410) –

उत्तर

7

आपका तुलना नहीं है क्योंकि मामले की, खाली स्थान के की वजह से विफल हो रहा है। ऐसा इसलिए हो रहा है क्योंकि जब आप पृष्ठभूमि में iwhite विकल्प का उपयोग करते हैं, तो vimdiff diff -b निष्पादित कर रहा है जो कि आप जो खोज रहे हैं उससे व्हाइटसाइट की तुलना कैसे करता है इसके बारे में अधिक प्रतिबंधक है। अधिक विशेष रूप से, -b विकल्प केवल व्हाइटस्पेस की मात्रा में मतभेदों को अनदेखा करता है जहां पहले से ही व्हाइटस्पेस है। आपके उदाहरण में, i0 = r0; को I0=R0; से अलग के रूप में फ़्लैग किया जा रहा है क्योंकि इसमें वर्णों के बीच सफेद जगह शामिल है और दूसरा नहीं है।

vimdiff दस्तावेज़ीकरण के अनुसार, आप को गैर-खाली मान पर सेट करके iwhite विकल्प के डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं। जिस अंतरफलक में आप रुचि रखते हैं वह --ignore-all-space है, जो व्हाइटस्पेस के बारे में अधिक लचीला है। इस प्रकार आप vimdiff में diffexpr बदल सकते हैं डिफ़ॉल्ट -b विकल्प के बजाय इस विकल्प का उपयोग करने के लिए: मेरे लिए अच्छी तरह से काम करता है के बाद

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

+1

उत्तर के लिए धन्यवाद। पहली पंक्ति में रिक्त स्थान की कमी के बारे में आपका अवलोकन सही समझ में आता है। अब, प्रश्न यह है कि मैं '-' प्रॉम्प्ट पर एक सरल (शायद एक लाइनर) कमांड के साथ '--ignore-all-space' कार्यक्षमता कैसे प्राप्त कर सकता हूं? अपने फ़ंक्शन को पढ़ना, मुझे लगता है कि अगर मुझे पता है कि मुझे क्या चाहिए/पता है तो if-endif संरचनाओं की वास्तव में आवश्यकता नहीं है। तो, मौजूदा ओपन बफर पर काम करते हुए, कमांड प्रॉम्प्ट से '--ignore-all-space' करने के बावजूद? – 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 

अधिक जानकारी के लिए दस्तावेज़ देखें

vimdiff +"set diffopt+=icase" file_1.txt file_2.txt