จะบันทึกสำเนาของบัฟเฟอร์ไปยังไฟล์ได้อย่างไร?


9

ฉันต้องการบันทึกสำเนา (หรือสแนปชอต) ของบัฟเฟอร์ลงในไฟล์ ลักษณะการทำงานจะคล้ายกับwrite-fileยกเว้นว่าจะไม่ตั้งค่าบัฟเฟอร์ให้เยี่ยมชมไฟล์นี้

สำหรับ usecase ให้จินตนาการว่าคุณมีเชลล์เซสชันและคุณต้องการบันทึกทั้งหมดลงในไฟล์บันทึกอย่างรวดเร็ว ไม่ควรเปลี่ยนชื่อบัฟเฟอร์ (เพื่อให้ฟังก์ชั่นที่ใช้ชื่อบัฟเฟอร์ยังคงทำงาน) และไม่ควรเยี่ยมชมไฟล์ (เพื่อให้ไฟล์ไม่ถูกเขียนทับโดยไม่ตั้งใจและไม่มีคำเตือนเมื่อออกจาก emacs)

ฉันสามารถจินตนาการวิธีที่สกปรกสองสามอย่างในการทำเช่นนี้ฉันจะโพสต์คำตอบด้วยตนเอง แต่การอ่านจากคู่มือระบบ "ไฟล์ที่เข้าชม" ทั้งหมดนั้นซับซ้อนกว่าที่ดูและฉันคิดว่ามันง่ายที่จะร่าง ทางออกที่ผิด มีวิธีซ่อนเร้นในตัวเพื่อบรรลุเป้าหมายนี้หรือไม่?

คำตอบ:


18

เพียงแค่เลือกบัฟเฟอร์ทั้งหมด ( C-x h) write-regionและการใช้งาน


3
คุณไม่จำเป็นต้องเลือกข้อความบัฟเฟอร์หากคุณใช้write-regionจาก Lisp (เช่นในคำสั่งของคุณเอง) เพียงผ่าน(point-min)และ(point-max)พร้อมกับชื่อไฟล์
ดึง

2
C-x h M-x write-region
Jakub Narębski

ขอบคุณสำหรับบัฟเฟอร์เลือกและM-x write-regionคำสั่งจริง
Grant Bowman

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)))

ดูเหมือนจะยุ่งยากมากกว่าที่ควรจะเป็นเพราะเราต้องดูแลทั้งไฟล์ที่เยี่ยมชมและชื่อบัฟเฟอร์และเราไม่สามารถแน่ใจได้ว่าเราจะไม่ลืมสิ่งอื่นใด

โซลูชันอื่น ๆ ที่เกี่ยวข้องกับการคัดลอกข้อความบัฟเฟอร์ในบัฟเฟอร์ใหม่จากนั้นบันทึกและฆ่าบัฟเฟอร์นั้นอาจทำงานได้ดีขึ้น แต่จากนั้นฉันก็กังวลเกี่ยวกับประสิทธิภาพของบัฟเฟอร์ขนาดใหญ่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.