कैसे पता लगाएं कि स्वैप फ़ाइलों में बिना सहेजे परिवर्तन होते हैं?


11

जब gvim (v.7.4.488) का उपयोग करके स्रोत कोड का संपादन किया जाता है, तो मैं कुछ बदलाव vcs (मैं Ubuntu लाइन में कमांड लाइन से git 2.1.4 का उपयोग कर रहा हूं) करना चाहता हूं।

git --status

दिखाता है कि मैंने कौन सी फाइलें बदलीं। हालाँकि, यह .*.swpवर्तमान में दिखाई देने वाले बफर (एस) के विम को दिखाता है (दोनों यदि फ़ाइल में सहेजे न गए परिवर्तन हैं और जब संपादित फ़ाइल .*.swp-file के समान है )। निश्चित रूप से, git इन फ़ाइलों को अनदेखा कर सकता है या vim स्वैप फ़ाइलों को एक अलग स्थान पर संग्रहीत कर सकता है (देखें vim.wikia या स्टैकओवरफ़्लो में यह प्रश्न )। लेकिन मुझे यह पसंद है कि जब वे बिना सहेजे बदलावों को .*.swpदिखाते git --statusहैं, क्योंकि यह मुझे संकेत देता है कि मुझे लगता है कि वे जिस स्थिति में हैं, उससे अलग स्थिति में फाइलें कर रहे हैं।

जब-जब फ़ाइल सेव की जाती है, मैं उस झूठी .*.swpगलतफहमी से बच सकता हूं , git --statusजब सेव की गई फाइल वही होती है .*.swp, जबकि उस फाइल को देखने के लिए सक्षम होना एक अलग स्थिति में होता है, जिसे मैं विम के साथ एडिट कर रहा होता हूं?

  • क्या यह केवल .*.swp-files के लिए संभव है , जब डिस्क पर फ़ाइल और विम में फ़ाइल भिन्न होती है?
  • क्या बिना सहेजे फाइलों का पता लगाने का एक और तरीका है?

@Elyashiv और @VanLaser की टिप्पणियों के संयोजन से यह पता लगाने की तुलना में एक सरल विधि में परिणाम मिलता है कि क्या स्वैप फ़ाइलें असम्बद्ध फाइलों को दर्शाती हैं:

  1. git को अनदेखा न करने दें। *। sw [po] फाइलें;
  2. जब git --statusकिसी भी .*.sw[po]-files का खुलासा करते हैं, तो :wavi; तथा,
  3. जोड़ें और प्रतिबद्ध करें।

1
आप :waयह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि कोई सहेजे न गए फ़ाइल नहीं हैं।
elyashiv

2
वास्तव में, यह सुनिश्चित करने के लिए कि आपकी सभी फाइलें आपके सामने आने से पहले बच git commit
जाएँगी

जवाबों:


8

vim -rकमांड लाइन पर वर्तमान निर्देशिका और अस्थायी निर्देशिका में सभी स्वैप फ़ाइलों को सूचीबद्ध करेगा, और चाहे वे किसी भी सहेजे न गए परिवर्तन हों। रेखा जो कहती है, उसके लिए देखो modified: no/YES

मुझे नहीं पता कि विम को अलग निर्देशिका में देखने के लिए कैसे कहा जाए, इसलिए आपको प्रत्येक निर्देशिका को बदलना होगा जिसमें एक स्वैप फ़ाइल होती है और चलती है vim -r। आप एक स्क्रिप्ट के साथ आ सकते हैं git status, जो आउटपुट का उपयोग करता है find -name '.*.sw[po]', या उपयोग किया जाता है , और फिर vim -rप्रत्येक निर्देशिका में बिना किसी परिवर्तन के सभी स्वैप फ़ाइलों को दिखाने के लिए भाग जाता है।

(मैं .*.sw[po]इसके बजाय का उपयोग करता हूं .*.swp, क्योंकि कभी-कभी .swoफ़ाइलों के अलावा फ़ाइलें बनाई जाती हैं .swp, जब आप एक ऐसी फ़ाइल को संपादित करते हैं जिसमें पहले से ही एक स्वैप फ़ाइल होती है। .swnफ़ाइलों को तब भी बनाया जा सकता है यदि आप किसी फ़ाइल को दो मौजूदा स्वैप फ़ाइलों के साथ संपादित करते हैं, लेकिन मुझे नहीं लगता है मैंने कभी जंगल में एक देखा है। यदि आप वास्तव में पागल हैं, तो आप उपयोग कर सकते हैं .*.sw[a-p]या बस .*.sw?।)

देखें :help -rपर (एक छोटे से) अधिक जानकारी के लिए -rविकल्प, या :help recover.txtवसूली और स्वैप फ़ाइल नामों के बारे में अधिक जानकारी के लिए।


1
खैर, विम की स्वैप फाइलें छिपी हुई फाइलें ( .फ़ाइलनाम में अग्रणी ) हैं, इसलिए सही पैटर्न होगा .*.sw[a-p](हालांकि रोग संबंधी मामलों में, आप वास्तव में सभी तरह से प्राप्त कर सकते हैं .foo.saa)। यह भी फ़्लैश फ़ाइलों से मेल खाता होना चाहिए, क्योंकि मुझे संदेह है कि आम तौर पर एक छिपी हुई फ़ाइल होगी।
जैमेसन

@jamessan .शेल गोला में अग्रणी की आवश्यकता होती है, लेकिन *.swpएक तर्क के रूप में काम करता है find। लेकिन अग्रणी .चीजों को सरल बनाता है। धन्यवाद!
लिथिस

8
  • क्या यह केवल .*.swp-files के लिए संभव है , जब डिस्क पर फ़ाइल और विम में फ़ाइल भिन्न होती है?

हाँ। नीचे दिया गया स्निपेट ( tpope के vimrc से अनुकूलित ) जब यह संशोधित नहीं होता है, तो बफर के लिए स्वैप फ़ाइल को निष्क्रिय कर देगा, इसलिए स्वैप फ़ाइलें केवल संशोधित फ़ाइलों के लिए मौजूद हैं।

autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
  \ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif

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

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