विम - पुनर्प्राप्ति के बाद स्वचालित रूप से SWP फ़ाइल को हटा दें मूल फ़ाइल को परिवर्तित नहीं करता है


9

जब विम प्रक्रिया को अचानक समाप्त कर दिया जाता है (जैसे सिस्टम क्रैश), यह एक SWP फ़ाइल छोड़ देता है। बाद में विम में मूल फ़ाइल को खोलना पुनर्प्राप्ति का विकल्प देता है। अधिकांश समय पुनर्प्राप्त फ़ाइल सहेजी गई फ़ाइल के समान है, क्योंकि मुझे अक्सर बचत करने की आदत है। तो विम कहते हैं:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

खैर, निश्चित रूप से मैं .swp फ़ाइल अब हटाना चाहते हैं!

मैं कैसे इस मामले में स्वचालित रूप से SWP फ़ाइल को हटाने के लिए विम प्राप्त कर सकता हूं?

ऐसा करने के लिए कोई अंतर्निहित सेटिंग नहीं लगती है, इसलिए मैं एक उपयुक्त ऑटोकॉमैंड इवेंट की तलाश कर रहा हूं।

एक तरीका मुझे मिला वह :e #संदेश के बाद है, जो स्वैप-मौजूद विकल्पों को फिर से प्रकट करने का कारण बनता है, फिर मैं "हटाएं"। लेकिन मुझे वास्तव में हर बार उन अतिरिक्त चरणों को नहीं करना चाहिए।


धन्यवाद! मैंने पाया कि आपकी :e #चाल आदर्श नहीं है, लेकिन फिर भी नीचे दिए गए मौजूदा उत्तर की तुलना में अधिक उपयोगी है। :-)
रायलू

जवाबों:


5

नोट: आपने यह नहीं कहा है कि आप किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं। निम्नलिखित एक यूनिक्स शेल के साथ काम करता है लेकिन अगर विंडोज चल रहा है, तो आप नंगे-हड्डियों Cygwin या कुछ अन्य शेल डाउनलोड कर सकते हैं।

मैं आपके जैसा ही करता था, :eपुनर्प्राप्ति फ़ाइल को हटाने के लिए विकल्प प्राप्त करने के लिए उसी फ़ाइल को फिर से खोलने के लिए चलाएँ । क्रैश या अनपेक्षित कंप्यूटर पुनरारंभ होने के बाद, मैं सभी अवशेष Vim पुनर्प्राप्ति फ़ाइलों vim -rको स्वैप फ़ाइलों पर चलाकर और पुनर्प्राप्ति को आगे बढ़ने देता हूं ।

जब फाइलें नहीं बदली हैं

यदि फ़ाइलें परिवर्तित नहीं हुई हैं, तो मैं तुरंत पुनर्प्राप्ति फ़ाइल को हटाना चाहता हूं। यह बहुत अच्छा होगा यदि विम स्वचालित रूप से ऐसा कर सकता है लेकिन दुर्भाग्य से, ऐसा नहीं है।

जब फाइलें बदल गई हैं

यदि फाइलें बदल गई हैं, तो मैं DiffOrigमूल और पुनर्प्राप्त संस्करणों के बीच अंतर की तुलना करने के लिए कमांड चलाता हूं । यदि मैं पुनर्प्राप्ति फ़ाइल से परिवर्तन से खुश हूं, तो मैं फ़ाइलों को :xकमांड से सहेज कर बाहर निकलता हूं । यदि नहीं, तो मैं छोड़ने के साथ पुनर्प्राप्त परिवर्तनों को छोड़ देता हूं :q!। यदि पुनर्प्राप्ति फ़ाइल किसी सहेजी गई फ़ाइल से संबद्ध नहीं है, उदाहरण के लिए .swp, मैं आमतौर पर :w filenameफ़ाइल नाम के साथ पुनर्प्राप्त बफर को फ़ाइल में सहेजने के लिए उपयोग करता हूं ।

डिफॉगर हेल्पर

मैंने डिफॉगर कमांड को अपने साथ जोड़ा .vimrcताकि यह हमेशा उपलब्ध रहे।

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

शैल लिपि

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

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

rm -iविकल्प की पुष्टि (की आवश्यकता है yफ़ाइल को नष्ट करने के लिए)। यदि आप अधिक आश्वस्त हैं और प्रक्रिया को गति देना चाहते हैं, तो इसे छोड़ा जा सकता है।

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