जब आप किसी फ़ाइल पढ़ना शुरू, वर्तमान समय के लिए एक बफर चर सेट: जांच करने के लिए करता है, तो काफी समय के बाद से पिछले बचाने के लिए और बीत जाने पर
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 सेकंड के बाद लिखा जाता है। कुछ गलत होने पर स्वैप से रिकवरी काफी सरल और शायद अधिक विश्वसनीय है।
स्रोत
2011-08-09 05:23:36
ऐसा लगता है कि यह सुविधा पहले से ही विम के अगले संस्करणों के लिए योजना बनाई गई है (Vim 7.3 पर: 'todo.txt' से स्वत: सहेजने में सहायता करें)। इस पल के लिए मेरा मानना है कि प्रत्येक सेकेंड के लिए सहेजने के लिए एक विस्क्रिप्ट लिखने के लिए कोई उपयुक्त autocmd/ईवेंट नहीं है। लेकिन माइकल द्वारा प्रस्तावित समाधान ज्यादातर मामलों के लिए काम करना चाहिए, क्योंकि कर्सर को स्थानांतरित नहीं होने पर भी यह सहेजता नहीं है, यह बहुत संभावना नहीं है कि आप कर्सर को घुमाने के बिना कोई भी परिवर्तन करेंगे। – mMontu
http://vim.wikia.com/wiki/Auto-save_current_buffer_periodically –
विम 7.4 में, अंतर्निहित ऑटोसव सुविधा अभी भी भविष्य के संस्करणों में जोड़े जाने के लिए सुधार के तहत सूचीबद्ध है। –