फाइल में बफर की कॉपी कैसे बचाएं?


9

मैं एक फाइल में बफर की एक कॉपी (या एक स्नैपशॉट) को बचाने में सक्षम होना चाहूंगा। व्यवहार के समान होगा write-file, सिवाय इसके कि यह बफर को इस फाइल पर जाने के लिए सेट नहीं करेगा ।

एक usecase के लिए, कल्पना करें कि आपके पास एक शेल सत्र है, और आप इसे जल्दी से एक लॉग फ़ाइल में सहेजना चाहते हैं। बफ़र का नाम बदला नहीं जाना चाहिए (ताकि बफ़र नाम अभी भी काम करने पर निर्भर करता है), और यह एक फ़ाइल पर नहीं जाना चाहिए (ताकि फ़ाइल गलती से अधिलेखित न हो, और emacs से बाहर निकलने पर कोई चेतावनी न हो)।

मैं ऐसा करने के कुछ गंदे तरीकों की कल्पना कर सकता हूं, मैं एक को आत्म-उत्तर के रूप में पोस्ट करूंगा, लेकिन मैनुअल से पढ़ना, पूरी "विज़िट की गई फ़ाइल" प्रणाली लग रही है की तुलना में अधिक जटिल है, और मुझे लगता है कि यह एक मसौदा तैयार करना आसान है गलत समाधान। क्या इसे प्राप्त करने का एक छिपा हुआ, अंतर्निहित, तरीका है?

जवाबों:


18

बस पूरे बफर ( C-x h) और उपयोग का चयन करें write-region


3
यदि आपको write-regionलिस्प (उदाहरण के लिए खुद की आज्ञा से) उपयोग कर रहे हैं, तो आपको बफर टेक्स्ट का चयन करने की आवश्यकता नहीं है । बस इसे पास करें (point-min)और (point-max), फ़ाइल नाम के साथ।
ड्रू

2
C-x h M-x write-region
जकुब नारबस्की

चयन बफ़र और वास्तविक M-x write-regionआदेश के लिए धन्यवाद ।
ग्रांट बोमन

0

गंदा elispकरना जो मैं करना चाहता हूं:

(defun tv/copy-buffer-to-file (filename)
  (interactive "sFile to write? ")
  (let ((bufname (buffer-name)))
    (set-visited-file-name filename)
    (save-buffer)
    (set-visited-file-name nil)
    (rename-buffer bufname)))

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

एक नए बफर में बफर टेक्स्ट को कॉपी करने से जुड़े अन्य समाधान, फिर उस बफर को सहेजना और मारना शायद बेहतर होगा, लेकिन फिर मैं बड़े बफ़र्स के साथ प्रदर्शन के मुद्दों पर चिंतित होऊंगा।

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