क्या Vim ऑटो-सेव फाइल्स बनाना संभव है?


32

कुछ वर्ड प्रोसेसर और टेक्स्ट एडिटर समय-समय पर हमारे द्वारा संपादित की जाने वाली फाइलों को ऑटो-सेव करते हैं, जो कि नॉटी क्रैश से बचने के लिए बहुत सुविधाजनक है, आदि।

क्या विशिष्ट अंतराल के बाद विम फ़ाइलों को ऑटो-सेव करने का कोई तरीका है?

जवाबों:


30

एक अंतर्निहित विकल्प नहीं है, हालांकि :help 'autosave'(indo.txt में) इस बात का वर्णन है कि ऐसा विकल्प क्या कर सकता है।

इसे लागू करने का एक संभावित तरीका CursorHoldऑटोकॉमैंड इवेंट का उपयोग करना है । जब उपयोगकर्ता 'updatetime'मिलीसेकंड के लिए कुंजी नहीं दबाता है तो यह घटना शुरू हो जाती है ।

autocmd CursorHold * update

:updateअगर यह संशोधित किया गया है आदेश केवल बफर बचाता है। यदि आप यह भी चाहते हैं कि आवेषण मोड सक्रिय होने के दौरान CursorHoldIघटना सूची में जोड़ा जा सके।

autocmd CursorHold,CursorHoldI * update

एक अन्य विकल्प एक विकल्प है 'autowrite', जो बाहरी कमांड को निष्पादित करने से पहले बफर को बचाएगा (चलने से पहले बचत के लिए उपयोगी :make) या एक अलग बफर में स्विच करना।


अगर यह काम कर रहा है तो आप कैसे नोटिस कर सकते हैं?
निलोन

@nilon इसे उस स्थिति पट्टी पर प्रिंट करना चाहिए जिसे यह सहेजा गया है, जैसे कि आपने दबाया है: अपने आप को।
MaudPieTheRocktorate

12

विम में एक ऑटो-सेव फीचर है, लेकिन यह इसे "रिकवरी" फाइल में सेव करता है।

जब आप किसी दस्तावेज़ को संपादित करते हैं, जैसे कि MyFile.txtविम रिवाइज फाइल बनाएगा .MyFile.txt.swp। यदि आपका सिस्टम क्रैश करने के लिए था, या आपका सत्र मरने वाला था, तो आप पुन: कनेक्ट कर सकते हैं, और अनिवार्य रूप से ठीक हो सकते हैं जहां आपने छोड़ा था, निम्नलिखित द्वारा:

vim -r MyFile.txt

यह संपादन के लिए फ़ाइल खोल देगा, और आपके द्वारा किए गए अंतिम परिवर्तनों को पुनर्प्राप्त करेगा।

फिर आप पुनर्प्राप्त संस्करण को सामान्य तरीके से सहेज सकते हैं :w

दुर्भाग्य से, जब आप विम से बाहर निकलते हैं, तो यह .MyFile.txt.swpचारों ओर निकल जाएगा , और आपको इसे मैन्युअल रूप से निकालने की आवश्यकता है:

rm .MyFile.txt.swp

देखें "वसूली" मैन पेज भी अध्याय 11


1
जब आप विम को ठीक से बाहर करते हैं (यानी :wqया :q!या ZZया आदि के साथ), स्वैप फाइलें अपने आप ही हटा दी जानी चाहिए।
Doorknob

4
@Doorknob जब आप एक रिकवरी के बाद बाहर नहीं निकलते हैं ... ;-)
रॉल्फेल

8

मैंने एक प्लगइन vim-autosave बनाया जो समय-समय पर अपने बफ़र्स को बचाने के लिए टाइमर की विम 8 सुविधा का उपयोग करता है।


वाह, 8 प्लगइन्स पहले से ही बाहर आ रहे हैं। बहुत अच्छा लग रहा है, ईसाई!
थमेरा

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

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

2

मैं अपना वीम हर बार फ़ोकस खो जाने पर बचा लेता हूँ।

autocmd FocusLost <your-patterns-here> silent! wall

मेरे पैटर्न बहुत लंबे हैं और मैं उन्हें कई ऑटोकैड में उपयोग करता हूं लेकिन पूर्णता के लिए यह ऐसा दिखता है:

if exists(':keeppatterns')
    let s:keeppatterns = 'keeppatterns '
else
    let s:keeppatterns = ''
endif

augroup AutoSaveGroup
    " :help file-pattern has some info,
    " but some of it is is buried in the PATTERNS section of usr_40.txt
    let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"

    autocmd!
    execute "autocmd FocusLost"     s:autoPattern   "silent! wall"
    execute "autocmd BufWritePre"   s:autoPattern   s:keeppatterns . 'call FixFormatting(expand("<afile>"))'

    execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
    execute "autocmd FileChangedRO" s:autoPattern "write!"

    autocmd FocusLost   *.txt   silent! wall
augroup END

1

जैसा कि दूसरों ने संकेत दिया है, विम के पास एक स्वैप फ़ाइल (.swp) है जो कि कभी आपकी मूल फ़ाइल बनाई जाएगी, लेकिन आपकी .vimrc फ़ाइल में, आप .swp निर्देशिका सेट कर सकते हैं।

आपको निर्देशिका बनाना होगा mkdirऔर फिर अपना .vimrc उस स्थान पर सेट करना होगा।

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

Vim-कार्यक्षेत्र प्लगइन एक काफी अनुकूलन ऑटो को बचाने विशेषता यह है कि आपकी आवश्यकताओं के अनुरूप है। डिफ़ॉल्ट रूप से, यह एक कार्यक्षेत्र सत्र (इसकी मुख्य विशेषता) में ऑटोसैव को सक्षम करता है, लेकिन आप इसे हमेशा ऑटोसैव पर सेट कर सकते हैं यदि यह सब आप ( let g:workspace_autosave_always = 1) के लिए देख रहे हैं ।


1

जब भी पाठ बदला जाए तो बफर को सहेजने का प्रयास करें:

autocmd TextChanged,TextChangedI <buffer> silent write

यह मेरे लिए काम करता है।

स्रोत

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.