2011-04-18 11 views
83

विम 7.3 में नई सुविधाओं में से एक 'लगातार पूर्ववत' है, जो बफर से बाहर निकलने पर अवांछित फ़ाइल को सहेजने की अनुमति देता है।विम के निरंतर पूर्ववत का उपयोग करना?

दुर्भाग्यवश, मैं इसे ठीक से सक्षम करने में सक्षम नहीं हूं, या मुझे इसका गलत उपयोग करना होगा। यहाँ क्या मैं अब तक की कोशिश की है:

मैं निम्नलिखित ~/.vimrc

set undofile    " Save undos after file closes 
set undodir=$HOME/.vim/undo " where to save undo histories 
set undolevels=1000   " How many undos 
set undoreload=10000  " number of lines to save for undo 

इस के बाद, मैं माना जाता है कि किसी भी फाइल को खोलने के लिए, इसे संपादित करें, फिर सहेजें-पास यह सक्षम होना चाहिए जोड़ा , और जब मैं इसे फिर से खोलता हूं तो मुझे पूर्ववत/फिर से करने में सक्षम होना चाहिए जैसे कि मैंने कभी नहीं छोड़ा था। दुर्भाग्यवश, यह मामला प्रतीत नहीं होता है, क्योंकि कोई निर्दोष कभी लिखा नहीं जाता है।

नोट्स:

  1. मैं क्रीम परियोजना के बिना विम से विम 7.3 का उपयोग कर 7 विन पर हूँ। लगातार पूर्ववत बेक-इन है।

  2. $ HOME/.vim/पूर्ववत मेरी फाइल सिस्टम

+30

बस तनाव के लिए, बिंदु 2) ** बहुत ** महत्वपूर्ण है। विम आपके लिए निर्देशिका नहीं बनाएगा और लगातार पूर्ववत तब तक काम नहीं करेगा जब तक आप 'mkdir ~/.vim/undo' – puk

+2

+1 नहीं करते। क्षमा करें, लिनक्स पर यह काम करता है ... मुझे इसके बारे में बताने के लिए धन्यवाद! –

उत्तर

3

पर मौजूद है मुझे लगता है कि $ HOME के ​​रूप में विज्ञापित काम नहीं करता।

मेरे सिस्टम पर, :echo $HOME एच: \, लेकिन : e $HOME/ दिखाता है: ~/ अमान्य फ़ाइल नाम।

आप को देखने के लिए कि क्या यह दूर हो जाती है यह

+0

मैं कर सकता था: echo $ HOME | और |: ई $ होम/| समस्याओं के बिना, लेकिन मैंने वैसे भी चीजों को बदलने की कोशिश की। यह कई बार काम करता था, न कि दूसरों पर। विशेष रूप से, जब मैं अपनी ~/.vimrc फ़ाइल संपादित कर रहा हूं, तो यह कभी भी बैकअप बचाता नहीं है। – duckworthd

+0

विंडोज 7 पर मैं '$ TEMP' का उपयोग कर रहा हूं। जब मैं 'undodir सेट' देखो? यह '~/AppData/स्थानीय/Temp' दिखाता है। पूर्ववत फ़ाइल जारी है और खुद को सही ढंग से लोड करता है। शायद '$ TEMP' अधिक विश्वसनीय होगा? – slawek

7

मैं अपने _gvimrc में यह करने की कोशिश की एक निरपेक्ष पथ के साथ की कोशिश कर सकते:

" Persistent undo 
try 
    set undodir=C:\vim\undodir 
    set undofile 
catch 
endtry 

यह काम कर रहा है जब मैं कोशिश पकड़ ब्रैकेट नष्ट कर दिया विज्ञापित के रूप में शुरू किया था, इस प्रकार :

" Persistent undo 
set undodir=C:\vim\undodir 
set undofile 

मुझे निर्देशिका बनाना पड़ा।

35

में इसे undodir बनाने के लिए रखें यदि यह अस्तित्व में नहीं है और लगातार पूर्ववत सक्षम है। विंडोज और लिनक्स दोनों पर परीक्षण किया।

" Put plugins and dictionaries in this dir (also on Windows) 
let vimDir = '$HOME/.vim' 
let &runtimepath.=','.vimDir 

" Keep undo history across sessions by storing it in a file 
if has('persistent_undo') 
    let myUndoDir = expand(vimDir . '/undodir') 
    " Create dirs 
    call system('mkdir ' . vimDir) 
    call system('mkdir ' . myUndoDir) 
    let &undodir = myUndoDir 
    set undofile 
endif 
+2

यह निर्देशिका बनाने के लिए बेहतर हो सकता है: ': मूक कॉल सिस्टम ('mkdir -p'।& undodir) ' –

+0

मैं' & 'का उपयोग करता हूं क्योंकि मैं इसे 'छोड़ने' के बजाय' undodir' सेट करता हूं। (मेरे दिमाग में 'लेट' और 'सेट' के बीच यह भेद विस्क्रिप्ट के कई, कई, कई दिमाग-भयानक भयानक "विशेषताओं" में से एक है, लेकिन वाईएमएमवी।) –

+1

धन्यवाद केली, '.vim बनाने का अच्छा विचार है 'अगर यह अस्तित्व में नहीं है। दुर्भाग्यवश विंडोज़ पर '-पी' ध्वज मौजूद नहीं है इसलिए मैंने विंडोज संगतता सुनिश्चित करने के लिए दो बार' mkdir' को कॉल करने के लिए उत्तर संपादित किया। –

1

यह अब काम करता है के रूप में उम्मीद: विंडोज 7, :setlocal undofile पर एक विम 7.4 बफर में file.txt खुला, तो बफर में होने वाले बदलाव को बचाने, और undofile .file.txt.un~ के साथ क्योंकि :set undodir? रिपोर्ट है कि बनाई गई है "undodir =।" डिफ़ॉल्ट रूप से - यानी इसे मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता नहीं है। आप मॉडलिन में :set undofile भी कर सकते हैं।

संबंधित मुद्दे