.Swp फ़ाइल वाली फ़ाइल खोलने पर चेतावनी से कैसे छुटकारा पाएं?


46

मैं एक .swp फ़ाइल वाली फ़ाइल खोलने पर कष्टप्रद चेतावनियों से कैसे छुटकारा पा सकता हूँ? या, मैं .swp फ़ाइलों को कैसे उत्पन्न नहीं करता? उदाहरण चेतावनी:

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

जवाबों:


44

यह संदेश वास्तव में बहुत महत्वपूर्ण है यदि आप पाठ नहीं खोने के बारे में परवाह करते हैं जो आपने संभवतः नहीं बचाया है। इसे कष्टप्रद नहीं माना जाना चाहिए, और इसके कारण आपको स्वैप फ़ाइल को जल्दबाजी में हटाना नहीं चाहिए या vimइसके बिना चलने के लिए कॉन्फ़िगर करना चाहिए।

आपके द्वारा संपादित की गई किसी भी फ़ाइल में आपके द्वारा संपादित करते समयvim एक संबंधित स्वैप फ़ाइल होगी , जो परिवर्तनों का ट्रैक रखने के लिए उपयोग करती है। जब आप किसी फ़ाइल का संपादन करना छोड़ देते हैं, तो स्वचालित रूप से संबंधित स्वैप फ़ाइल को छोड़ देगा। इसलिए, स्वैप फ़ाइल का अस्तित्व, और मूल फ़ाइल को ओवरटॉप लिखने का आपका प्रयास, विचार और उचित कार्रवाई का कारण होना चाहिए।vimvim

संदेश में प्रस्तुत दो परिदृश्य ( E325: ATTENTION Found a swap file) वास्तव में काफी सामान्य हैं: (1) या तो एक और vimप्रोग्राम संपादित कर रहा है उसी फ़ाइल को संपादित करने की कोशिश कर रहे हैं (यह वास्तव में एक और व्यक्ति हो सकता है - जिस स्थिति में यह वास्तव में समझ में नहीं आएगा। बस स्वैप फ़ाइल को नेत्रहीन रूप से हटाने के लिए - या यह आपको किसी अन्य टर्मिनल विंडो या टैब में हो सकता है), या (2) पिछला vimसत्र क्रैश हो गया (अधिकतर ऐसा तब होता है जब आप दूरस्थ रूप से संपादन कर रहे होते हैं, और नेटवर्क सत्र समाप्त हो जाता है - जिसमें यदि विम सत्र को सामान्य रूप से बाहर नहीं किया गया था, और .swpफ़ाइल पीछे रहती है, तो इस दूसरे परिदृश्य का एक और उदाहरण यह है कि आपने गलती से टर्मिनल विंडो या टैब को बंद कर दिया था जिसमें एक सक्रिय या पृष्ठभूमि वाला vimसत्र था)।

जब मैं इस संदेश का सामना करता हूं, तो मैं पहले इस बारे में सोचता हूं कि क्या मैं इस फाइल को किसी अन्य टर्मिनल विंडो या टैब में संपादित कर रहा हूं, क्योंकि मैं सामान्य रूप से प्रत्येक टर्मिनल को कई टैब के साथ संचालित करता हूं:

यहाँ छवि विवरण दर्ज करें

अगर मुझे पता चलता है कि मैं किसी अन्य स्थान पर संपादन कर रहा हूं, और उसमें वापस आ सकता हूं, तो मैं इस अतिरिक्त सत्र की qकुंजी दबाता हूं (Q)uit, और मूल vimसत्र के माध्यम से संपादन पर लौटता हूं ।

कभी-कभी अगर मुझे पूरी तरह से यकीन नहीं है, (Q)uitतो jobsमैं यह सत्यापित करने के लिए दौड़ता हूं कि क्या मैं vimठीक उसी टर्मिनल में चल रहा हूं ; अगर कुछ नहीं आता है, तो मैं ps -ef | grep vimयह जांचने के लिए दौड़ता हूं कि क्या मैं vimकहीं और चल रहा हूं (यानी किसी अन्य टर्मिनल विंडो या टैब में)। मुद्दा यह है, मैं हमेशा मूल vimसत्र के माध्यम से संपादन फिर से शुरू करने की कोशिश करता हूं ।


तो मुझे विश्वास है कि मैं मूल संपादन सत्र में नहीं लौट सकते, और मैं अभी भी इन विकल्पों के साथ प्रस्तुत कर रहा हूँ, तो मैं प्रेस rकरने के लिए (R)ecover

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

दबाने पर r, आप इस तरह एक संदेश देखेंगे:

Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

यदि, दूसरी ओर, मुझे अब उन विकल्पों का सामना नहीं करना पड़ता है, क्योंकि मैं शेल प्रॉम्प्ट में हूं, तो मैं विकल्प के vimसाथ चलता हूं -r, निम्नानुसार है:

vim -r notes

परिणामी संदेश समान होगा:

Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

किसी भी तरह, ENTERजारी रखने के लिए दबाएं , और आप अपनी फ़ाइल देखेंगे।

नोट: अगर विम को इस बारे में संदेह है कि यह क्या मिला, तो यह एक त्रुटि संदेश देगा और "???" के साथ लाइनें सम्मिलित करेगा। लिखित मे। यदि आप पुनर्प्राप्त करते समय कोई त्रुटि संदेश देखते हैं, तो "???" के लिए फ़ाइल में खोजें। क्या गलत है देखने के लिए। आप जिस पाठ को चाहते हैं उसे प्राप्त करने के लिए कट और पेस्ट करना चाह सकते हैं।

सबसे आम टिप्पणी है "??? LINES MISSING"। इसका मतलब है कि विम मूल फ़ाइल से पाठ नहीं पढ़ सकता है। यह तब हो सकता है जब सिस्टम क्रैश हो गया और मूल फ़ाइल के कुछ हिस्सों को बचाया नहीं गया।

उस ने कहा, मैंने कभी उन ???निशानों को नहीं देखा है, इसलिए यह वास्तव में दुर्लभ घटना होनी चाहिए ।


इसके बाद, सेव (यानी राइट) के लिए सामग्री को किसी अन्य फ़ाइल (आमतौर पर मैं सिर्फ संलग्न "2" मूल फ़ाइल नाम के अंत में):

:w notes2

अगला, इस vimसत्र को बलपूर्वक छोड़ें :

:q!

अगला, दो फाइलों की तुलना करें:

diff notes notes2

यदि diffरिटर्न कुछ भी नहीं है , तो इसका मतलब है कि कोई अंतर नहीं है, और यह स्वैप फाइल और दूसरी फाइल को हटाने के लिए सुरक्षित है:

rm .notes.swp notes2

इस बिंदु पर, मूल फ़ाइल खोलें और आगे बढ़ें जैसे कि कोई समस्या नहीं थी:

vim notes

यदि diffरिटर्न कुछ है , तो इसका मतलब है कि मूल फ़ाइल (स्वैप फ़ाइल के माध्यम से) में परिवर्तन थे, जो पुनर्प्राप्त करने के लिए धन्यवाद, दूसरी फ़ाइल में सहेजे गए हैं।

चूंकि उन परिवर्तनों को दूसरी फ़ाइल में कैप्चर किया गया है, आप स्वैप फ़ाइल को हटाने के लिए सुरक्षित हैं और मूल फ़ाइल को दूसरे के साथ अधिलेखित कर रहे हैं:

rm .notes.swp
remove .notes.swp? y

mv notes2 notes
overwrite notes? (y/n [n]) y

इस बिंदु पर, मूल फ़ाइल खोलें और आगे बढ़ें जैसे कि कोई समस्या नहीं थी:

vim notes

यह बहुत काम की तरह लगता है, लेकिन एक बार जब आप वर्कफ़्लो की आदत डाल लेते हैं तो यह अधिकतम 20 सेकंड की तरह होता है।


2
विश्वास नहीं कर सकता कि यह स्वीकृत उत्तर नहीं है। यह एकदम सही है। +1
डेविड

स्वीकृत उत्तर की तुलना में बहुत बेहतर है। काश हमारे पास इसे संबोधित करने का एक तरीका होता!
माइकल डुरंट

1
यह हमेशा ऐसा नहीं होता है कि संदेश उपयोगी है। यदि मैं किसी फ़ाइल का संपादन कर रहा हूं, तो मुझे परवाह है कि संपादन शुरू करने के बाद से फ़ाइल बदल गई है , फिलहाल मैं इसे सहेजने की कोशिश करता हूं, यह नहीं कि क्या मैं इसे किसी अन्य विम विंडो में भी संपादित कर रहा हूं। मेरे लिए दो टर्मिनलों में फ़ाइल खोलना पूरी तरह से ठीक है, इसलिए जब तक फ़ाइल इंटरलेव में सेव नहीं करती है। जब मैं बचाने की कोशिश करता हूं, तो विम को वास्तव में मुझे नंगा करने की जरूरत होती है, न कि जब मैं इसे खोलता हूं।
केन साइमन

दुर्भाग्य से यह सवाल का जवाब नहीं देता है, यह केवल कहता है कि मुझे नाग स्क्रीन को नजरअंदाज नहीं करना चाहिए। मेरा परिदृश्य यह है कि मुझे फ़ाइल पहले ही vim में खुली हुई मिल गई है (संपादन के लिए, हो सकता है), फ़ाइल के अलग-अलग हिस्सों को एक ही समय पर एक साथ देखना चाहते हैं, और विभाजन बफ़र्स नहीं चाहते क्योंकि clang_complete बफ़र्स का आकार बदलता रहता है । इस मामले में, मैं वास्तव में जानना चाहता हूं कि विम में एक फाइल को आसानी से कैसे खोला जाए और क्या यह स्वैप फाइल को अनदेखा करता है।
लीलंथ्रान

@ लेलंथ्रानvim -n file_name
user664833

19

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

यदि वह संदेश गलत है, तो आपको यह निर्धारित करने की आवश्यकता है कि आपका विम सत्र अनुचित तरीके से कैसे निकला और भविष्य में इससे बचें।

ठीक होने के लिए, यह इस उदाहरण में एक समस्या हो सकती है क्योंकि "नोट्स" वीम .swp फ़ाइल से नया है, लेकिन आप अभी भी कोशिश कर सकते हैं। बस सुनिश्चित करें कि आप अपने "नोट्स" फ़ाइल को पहले किसी बैकअप स्थान पर कॉपी करें।

" :help recover.txt" के माध्यम से पढ़ना एक अच्छा विचार होगा ।

यहाँ सबक यह है कि आप इस संदेश को देखने वाले नहीं हैं, और इसका मतलब है कि आप कहीं न कहीं कुछ गलत कर रहे हैं। यह (शायद) विम का दोष नहीं है।

अगर इस बिंदु पर आप अभी भी पूरी तरह से दृढ़ हैं तो विम को .swp फाइल न बनाने दें ताकि आप क्रैश और अन्य संबंधित समस्याओं से उबर सकें, तो आप " set noswapfile" में डाल सकते हैं ~/.vimrc


1
सावधान रहे! मैंने लगभग अपना सारा काम VIM के साथ खिलवाड़ करते हुए खो दिया। कुछ भी आज़माने से पहले अपना कोड कॉपी कर लें।
स्क्विर्ल

मैं दृढ़ता से पाठकों को उपयोगकर्ता 664833 द्वारा जवाब की समीक्षा करने का सुझाव देता हूं ( यह संदेश वास्तव में बहुत महत्वपूर्ण है ... ) जैसा कि मुझे लगता है कि यह बहुत बेहतर सूचनात्मकता और सलाह देता है कि यह जवाब imho
माइकल डुरंट

11

आप एक स्वैप का उपयोग किए बिना विम खोलने के लिए उपयोग कर सकते हैं :

हर समय ऐसा करने के लिए, बस डाल दिया

alias vim='vim -n' 

अपने .bashrc या .bash_aliases फ़ाइल में

यदि आपको कभी भी एन विकल्प के बिना वीम चलाने की जरूरत है, तो बस चलाएं

\vim

3
मैं हमेशा बिना स्वैप के चलने की सलाह नहीं दूंगा, लेकिन "-n" वास्तव में ठीक वही है जो मुझे चाहिए था। मैं सामान्य रूप से एक स्वैप फ़ाइल का उपयोग करता हूं। हालांकि, जब विम का उपयोग एक अलग उपकरण के रूप में किया जाता है, तो मैं उन फाइलों को अलग-अलग देखने में सक्षम होना चाहूंगा, जिनके बिना मैं संपादन कर रहा हूं।
एजेंटलीन

1
मुझे यह उत्तर पसंद है - यह छोटा है, यह सटीक है और यह वास्तविक प्रश्न का उत्तर देता है!
लेलंथ्रान


1

मैं एक .swp फ़ाइल वाली फ़ाइल खोलने पर कष्टप्रद चेतावनियों से कैसे छुटकारा पा सकता हूँ?

का प्रयोग करें लघु संदेश अपने में विकल्प ~/.vimrc:

set shortmess=A

POSIX मोड को चलाते समय कौन सा डिफॉल्ट है।

हालांकि, ऐसा न करें : यह ईंधन दक्षता बढ़ाने के लिए अपनी कार के एयर बैग को हटाने जैसा है। लंबे समय में, आप उस सवाल का जवाब देने की तुलना में अधिक समय वसूल करेंगे।


1
किसी एकल-उपयोगकर्ता प्रणाली को मानते हुए, यह कॉन्फ़िगरेशन का भयानक नहीं है। मुझे बहुत सारे टर्मिनल टैब खुले हैं, और कभी-कभी मैं एक ऐसी फाइल को संपादित करना चाहता हूं जिसे मैंने पहले ही किसी और टैब में दफन कर दिया है। अगर मैं कुछ त्वरित संपादन करना चाहता हूं तो यह ठीक है। तो मैं अपने आप को अन्य vim विंडो में वापस मिल जाए, सौंदर्य है कि यह मुझे चेतावनी देंगे है तो उस फ़ाइल यह बचाने मैंने पहले बदल गया है, और मैं एक त्वरित कर सकते हैं :e(एक त्वरित सहित देखने के लिए क्या हुआ uपूर्ववत करने के लिए वापस करने के लिए क्या मैं बफ़र में था।) मुझे यह पसंद है कि पहले से ही एक फ़ाइल खुले होने के बारे में बहुत बेहतर है।
केन साइमन

1

मेरे साथ ऐसा तब हुआ जब मेरे टर्मिनल ने अप्रत्याशित रूप से vi के साथ मेरा कनेक्शन बंद कर दिया।

शुक्र है कि मैंने कोई बदलाव नहीं किया।

उस चेतावनी को हटाने और स्वैप को छोड़ने के लिए:

  1. इस प्रक्रिया को देख रहे हैं process ID: 2251 (still running), इस मामले में 2251 है
  2. सत्यापित करें कि आपको सही आईडी मिली हैps 2251
  3. का उपयोग कर प्रक्रिया को मार डालोkill 2251

और बस।

याद रखें कि स्वैप फाइलें आपकी सुरक्षा के लिए हैं, और आपको उन्हें पूरी तरह से अक्षम नहीं करना चाहिए।


लेकिन क्या होगा अगर कोई vi(m)प्रक्रिया नहीं है?
स्कॉट

-2

मैंने इस मुद्दे को तीन सरल चरणों में हल किया है:

1 :) "ls -la" चलाएँ जहाँ फ़ाइल मौजूद है ताकि आप उसी के लिए .swp फ़ाइल देख सकें।

2 :) अब "rm -i * .swp" यानी डायरेक्टरी से ".swp" फाइल को हटा दें।

3 :) अब पुष्टि करें कि ".swp" फ़ाइल को हटा दिया गया है।

4 :) अब उन चेतावनियों का आनंद लें।


3
rm -rfकिसी फ़ाइल को निकालने के लिए आप दुनिया में क्यों सुझाव देंगे ? मैंने -rfएक और अधिक समझदार-i
निफ़ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.