विंडोज 7 पर विमडिफ़ (7.4) नहीं चला सकते


29

मैंने हाल ही में विंडोज 7 मशीन पर जीवीएम का 7.4 संस्करण स्थापित किया है। Windows Explorer पर संदर्भ-संवेदनशील मेनू से दो फ़ाइलों को अलग करने की कोशिश कर रहा है, मुझे त्रुटि संदेश मिल रहा है:

E810: अस्थायी फ़ाइलें नहीं पढ़ या लिख
सकते हैं E97: भिन्न नहीं बना सकते

दो चयनित फ़ाइलें दो-फलक gVim दृश्य में खोली जाती हैं, और संपादक अलग-अलग मोड में प्रतीत होता है, लेकिन वास्तविक अंतर उजागर नहीं होते हैं।

%TEMP%और %TMP%वातावरण चर एक वैध निर्देशिका नाम के साथ भर जाते हैं।

मुझे नियमित gVim सत्र में फाइलें खोलने और :diffthisकमांड प्रॉम्प्ट में टाइप करने पर समान प्रतिक्रिया मिलती है ।

यह Vim 7.3 के साथ ठीक से काम करता था, लेकिन ऐसा लग रहा था कि v7.4 में कुछ बदला गया था।

मैं दो फ़ाइलों को कैसे अलग कर सकता हूं?

जवाबों:


45

यह समस्या विंडोज पर इंस्टॉलर द्वारा बनाई गई डिफ़ॉल्ट _vrcrc फ़ाइल के कारण हो सकती है। यदि आप अभी भी उस डिफ़ॉल्ट फ़ाइल का उपयोग कर रहे हैं, या यदि आपने इसे किसी बिंदु पर कॉपी किया है, तो उस फ़ंक्शन की जांच करें जिसे आपने diffexprविकल्प को सौंपा है । Vim 7.3 और 7.4 के बीच के पैच में से एक ने विंडोज पर cmd.exe शेल के लिए नए डिफॉल्ट कोटिंग नियम पेश किए। इस पैच ने MyDiff () फ़ंक्शन में पैच द्वारा हल की गई समस्या को ठीक करने के लिए डिज़ाइन किया गया वर्कअराउंड तोड़ दिया।

इंस्टॉलर को ठीक करके MyDiff () फ़ंक्शन 7.4.103 संस्करण द्वारा तय किया गया था। यहाँ MyDiff () फ़ंक्शन है जो नवीनतम इंस्टॉलर आपके लिए बनाएगा यदि आप इसे अपने _vimrc पर कॉपी करना चाहते हैं:

 function MyDiff()
   let opt = '-a --binary '
   if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
   if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
   let arg1 = v:fname_in
   if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
   let arg2 = v:fname_new
   if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
   let arg3 = v:fname_out
   if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
   if $VIMRUNTIME =~ ' '
     if &sh =~ '\<cmd'
       if empty(&shellxquote)
         let l:shxq_sav = ''
         set shellxquote&
       endif
       let cmd = '"' . $VIMRUNTIME . '\diff"'
     else
       let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
     endif
   else
     let cmd = $VIMRUNTIME . '\diff'
   endif
   silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
   if exists('l:shxq_sav')
     let &shellxquote=l:shxq_sav
   endif
 endfunction

आप अपने पूर्ण संस्करण को Vim :versionया :introकमांड्स का उपयोग करके , या स्टार्टअप पर स्प्लैश स्क्रीन पर देख सकते हैं ।

दुर्भाग्य से यदि आप एक आधिकारिक इंस्टॉलर चाहते हैं, तो आपको या तो 8.0 तक इंतजार करना होगा, या एक रात का निर्माण स्थापित करना होगा । फिर भी, आप अन्य स्थानों से विम स्थापित कर सकते हैं या अपना स्वयं का विम का निर्माण कर सकते हैं


स्टैक ओवरफ्लो पर डुप्लिकेट (असामान्य रूप से, दोनों साइटों पर ऑन-टॉपिक), यदि यह उत्तर अपडेट किया गया है तो अन्य को करना चाहिए।


1
तब नेट पर कुछ समाधान मिला, लेकिन यह केवल एक ही है जो मेरे लिए काम करता है!
ysap

BTW - आप उप-संस्करण के # कैसे बता सकते हैं (उदाहरण के लिए 7.4.103)?
21

तीन तरीके: खाली बफर पर स्टार्टअप पैच स्तर सहित संस्करण की जानकारी दिखाता है, :introकमांड एक ही पाठ दिखाता है, और :versionकमांड "शामिल पैच" लाइन पर जानकारी देता है। :versionसाथ ही शामिल या बहिष्कृत सुविधाओं की एक बहुत विस्तृत सूची देता है।
बेन

1
इसके अलावा, ब्रैम आमतौर पर प्रारंभिक मामूली संस्करण, जैसे 7.4.0 के बाद किसी भी आधिकारिक इंस्टॉलर को जारी नहीं करता है। लेकिन वहाँ स्थानों के एक बहुत हाल ही में Vim के लिए एक इंस्टॉलर पाने के लिए कर रहे हैं यदि आप संकलन की तरह महसूस नहीं करते हैं, तो सबसे अधिक बार उद्धृत किया जा रहा है शायद यहाँ: sourceforge.net/projects/cream/files/Vim
बेन

1
@ जब मैंने इस मुद्दे को ठीक कर लिया है, तो यह कुछ और था, और मुझे यह गलत MyDiff()लगा कि विंडोज़ पर वीआईएम का उपयोग करते समय इसका उपयोग किया जाए, लेकिन यह सेमी के माध्यम से विम का उपयोग करने के लिए कुछ है, मैं जीआईटी बैश के माध्यम से विम का उपयोग कर रहा हूं। धन्यवाद।
कप्तान मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.