Emacs बैकअप / ऑटो-सेव फाइलें बहुत मददगार हो सकती हैं। लेकिन ये फीचर भ्रामक हैं।
बैकअप फ़ाइलें
बैकअप फ़ाइलों में अंत में टिल्ड ( ~
या ~9~
) होते हैं और उपयोगकर्ता होम डायरेक्टरी को लिखे जाएंगे। जब make-backup-files
गैर-शून्य एमएसीएस स्वचालित रूप से मूल फ़ाइल का बैकअप बनाता है तो पहली बार फ़ाइल को बफर से बचाया जाता है। यदि आप एक नई फ़ाइल का संपादन कर रहे हैं, तो Emacs दूसरी बार फ़ाइल सहेजते समय एक बैकअप बनाएगा।
कोई फर्क नहीं पड़ता कि आप कितनी बार फ़ाइल को सहेजते हैं बैकअप अपरिवर्तित रहता है। यदि आप बफ़र को मारते हैं और फिर फ़ाइल पर दोबारा जाते हैं, या अगली बार जब आप एक नया Emacs सत्र शुरू करते हैं, तो एक नई बैकअप फ़ाइल बनाई जाएगी। नया बैकअप फ़ाइल की सामग्री को फिर से खोलने, या संपादन सत्रों की शुरुआत में दर्शाता है। लेकिन एक मौजूदा बैकअप को फिर कभी नहीं छुआ जाता है। इसलिए मुझे इसे बनाए गए बैकअप के लिए उपयोगी लगता है (नीचे कॉन्फ़िगरेशन देखें)।
उपसर्ग तर्कों के साथ बैकअप का स्पष्ट रूप से उपयोग save-buffer
( C-x C-s
) करने के लिए ।
diff-backup
और dired-diff-backup
इसके बैकअप या इसके विपरीत के साथ एक फ़ाइल की तुलना करता है। लेकिन बैकअप फ़ाइलों को पुनर्स्थापित करने के लिए कोई फ़ंक्शन नहीं है। उदाहरण के लिए, विंडोज के तहत, एक बैकअप फ़ाइल को पुनर्स्थापित करने के लिए
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
इसे मैन्युअल रूप से कॉपी करना होगा
C:\Users\USERNAME\.emacs.el
ऑटो-सेव फाइल्स
ऑटो-सेव फाइल्स हैशमार्क ( #
) का उपयोग करती हैं और स्थानीय रूप से प्रोजेक्ट डायरेक्टरी (वास्तविक फाइलों के साथ) के भीतर लिखी जानी चाहिए। कारण यह है कि ऑटो-सेव फाइलें केवल अस्थायी फाइलें होती हैं जो Emacs तब तक बनाती हैं जब तक कि एक फाइल फिर से नहीं बचती है (जैसे कि आज्ञाकारिता जल्दी करना)।
- फ़ाइल को सहेजने से पहले उपयोगकर्ता दबाता है
C-x C-s
( save-buffer
) Emacs ऑटो-सेव फाइलें - गिनती कीस्ट्रोक्स ( auto-save-interval
) पर आधारित होता है या जब आप टाइप करना बंद कर देते हैं ( auto-save-timeout
)।
- जब भी यह क्रैश होता है, तो Emacs ऑटो-सेव करता है, जिसमें Emacs जॉब को शेल कमांड से मारना भी शामिल है।
जब उपयोगकर्ता फ़ाइल को सहेजता है, तो ऑटो-सहेजा गया संस्करण हटा दिया जाता है। लेकिन जब उपयोगकर्ता फ़ाइल को सहेजे बिना बाहर निकालता है, तो Emacs या X सत्र क्रैश हो जाता है, स्वत: सहेजी गई फ़ाइलें अभी भी मौजूद हैं।
ऑटो-सेव फ़ाइलों का उपयोग revert-buffer
या recover-file
पुनर्स्थापित करने के लिए। ध्यान दें कि Emacs ने ~ / .emacs.d / auto-save-list नामक फाइलों में बाद की वसूली के लिए सत्रों को बाधित किया । recover-session
समारोह इस जानकारी का उपयोग करेंगे।
ऑटो-सेव फाइल से रिकवर करने का पसंदीदा तरीका है M-x revert-buffer RET
। Emacs या तो पूछेंगे "बफ़र को हाल ही में ऑटो-सेव किया गया है। ऑटो-सेव फ़ाइल से रिवर्ट करें?" या "फ़ाइल FILENAME से बफर वापस करें?"। बाद के मामले में कोई ऑटो-सेव फाइल नहीं है। उदाहरण के लिए, क्योंकि आपने एक और auto-save-intervall
कीस्ट्रोक टाइप करने से पहले बचाया है , जिस स्थिति में Emacs ने ऑटो-सेव फाइल को डिलीट कर दिया था।
ऑटो-सेव आजकल डिफ़ॉल्ट रूप से अक्षम है क्योंकि यह धीमी मशीन से कनेक्ट होने पर संपादन धीमा कर सकता है, और क्योंकि कई फ़ाइलों में संवेदनशील डेटा होता है।
विन्यास
यहाँ एक विन्यास है कि IMHO सबसे अच्छा काम करता है:
(defvar --backup-directory (concat user-emacs-directory "backups"))
(if (not (file-exists-p --backup-directory))
(make-directory --backup-directory t))
(setq backup-directory-alist `(("." . ,--backup-directory)))
(setq make-backup-files t ; backup of a file the first time it is saved.
backup-by-copying t ; don't clobber symlinks
version-control t ; version numbers for backup files
delete-old-versions t ; delete excess backup files silently
delete-by-moving-to-trash t
kept-old-versions 6 ; oldest versions to keep when a new numbered backup is made (default: 2)
kept-new-versions 9 ; newest versions to keep when a new numbered backup is made (default: 2)
auto-save-default t ; auto-save every buffer that visits a file
auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
auto-save-interval 200 ; number of keystrokes between auto-saves (default: 300)
)
संवेदनशील जानकारी
एक और समस्या यह है कि आप संवेदनशील डेटा के साथ Emacs को फ़ाइलों की प्रतियां फैलाना नहीं चाहते हैं। प्रति फ़ाइल आधार पर इस मोड का उपयोग करें । जैसा कि यह एक मामूली विधा है, मेरे उद्देश्यों के लिए मैंने इसका नाम बदला sensitive-minor-mode
।
सभी .vcf और .gpg फ़ाइलों के लिए इसे सक्षम करने के लिए , अपने .emacs में कुछ का उपयोग करें:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
वैकल्पिक रूप से, केवल कुछ फ़ाइलों की सुरक्षा के लिए, कुछ .txt फ़ाइलों की तरह , एक लाइन का उपयोग करें
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
फ़ाइल में।