2011-08-09 9 views
22

मैं नहीं जानना चाहता कि आपको ऑटो-सेव क्यों नहीं करना चाहिए या स्वैप फ़ाइल आदि क्यों नहीं है या ऑटो-सेव नहीं करने का कोई भी कारण नहीं है।विम में प्रत्येक 1 सेकंड फ़ाइल को स्वत: सहेजने के लिए कैसे करें?

मैं बस मौजूदा कार्य फ़ाइल को स्वचालित रूप से सहेजना चाहता हूं ताकि प्रत्येक 1 सेकंड में विम में सेव किया जा सके।

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

9

जब आप किसी फ़ाइल पढ़ना शुरू, वर्तमान समय के लिए एक बफर चर सेट: जांच करने के लिए करता है, तो काफी समय के बाद से पिछले बचाने के लिए और बीत जाने पर

au BufRead,BufNewFile * let b:save_time = localtime() 

एक घटना सेट अद्यतन नहीं करता है, तो:

au CursorHold * call UpdateFile() 

ऑटो को बचाने की अवधि निर्धारित करें, सेकंड में:

let g:autosave_time = 1 

फ़ाइल यदि nee को बचाने के लिए एक समारोह को परिभाषित करें डेड:

" save if needed/update the save_time after the save 
function! UpdateFile() 
    if((localtime() - b:save_time) >= g:autosave_time) 
     update 
     let b:save_time = localtime() 
    else 
     " just debugging info 
     echo "[+] ". (localtime() - b:save_time) ." seconds have elapsed so far." 
    endif 
endfunction 

फिर, समय स्पष्ट रूप से बचाने के लिए रीसेट करने के लिए:

au BufWritePre * let b:save_time = localtime() 

मैं vim 7.0 और बाद में इसके बाद के संस्करण का परीक्षण नहीं किया। साथ ही, कर्सरहोल्ड इवेंट ऐसी छोटी ऑटो-सेव अवधि के लिए पर्याप्त होने की संभावना नहीं है (यह रिकॉर्डिंग के दौरान भी ट्रिगर नहीं होता है) - शायद आपको कर्सर पर भी UpdateFile() पर कॉल करना चाहिए।

इसके अलावा, स्वैप फ़ाइलों का उपयोग करने पर विचार करें। डिफ़ॉल्ट रूप से एक स्वैप फ़ाइल 200 अक्षरों टाइप या निष्क्रियता के 4 सेकंड के बाद लिखा जाता है। कुछ गलत होने पर स्वैप से रिकवरी काफी सरल और शायद अधिक विश्वसनीय है।

+3

ऐसा लगता है कि यह सुविधा पहले से ही विम के अगले संस्करणों के लिए योजना बनाई गई है (Vim 7.3 पर: 'todo.txt' से स्वत: सहेजने में सहायता करें)। इस पल के लिए मेरा मानना ​​है कि प्रत्येक सेकेंड के लिए सहेजने के लिए एक विस्क्रिप्ट लिखने के लिए कोई उपयुक्त autocmd/ईवेंट नहीं है। लेकिन माइकल द्वारा प्रस्तावित समाधान ज्यादातर मामलों के लिए काम करना चाहिए, क्योंकि कर्सर को स्थानांतरित नहीं होने पर भी यह सहेजता नहीं है, यह बहुत संभावना नहीं है कि आप कर्सर को घुमाने के बिना कोई भी परिवर्तन करेंगे। – mMontu

+0

http://vim.wikia.com/wiki/Auto-save_current_buffer_periodically –

+2

विम 7.4 में, अंतर्निहित ऑटोसव सुविधा अभी भी भविष्य के संस्करणों में जोड़े जाने के लिए सुधार के तहत सूचीबद्ध है। –

23

जब भी टेक्स्ट बदल जाता है तो यह बफर बचाता है। (विम 7,4)

autocmd TextChanged,TextChangedI <buffer> silent write

+1

लालित्य और सादगी के लिए अंगूठे! एक हवा की तरह काम किया! [इसे अपने '_vimrc' में रखना होगा।] – llinfeng

1

vim-workspace प्लगइन एक काफी अनुकूलन ऑटो को बचाने विशेषता यह है कि (ताकि आप पिछले लेखक व्यवहार जीत पाने autoread के साथ) आपकी आवश्यकताओं के अनुरूप है। आप इसे हमेशा ऑटोवॉव पर सेट कर सकते हैं (डिफ़ॉल्ट रूप से, यह केवल वर्कस्पेस सत्र में स्वतः स्वत: सहेजता है) और तदनुसार अपना अपडेटटाइम सेट करें।

let g:workspace_autosave_always = 1 
updatetime=1000 
संबंधित मुद्दे