ฉันกำลังพยายามสร้างฟังก์ชั่นที่แทรกข้อความลงในไฟล์โดยไม่ต้องเปลี่ยนไปใช้บัฟเฟอร์ของไฟล์
ฉันรู้ว่าสิ่งนี้สามารถทำได้ด้วยเสียงสะท้อน แต่มีวิธีทำโดยใช้ elisp เท่านั้นหรือไม่
ฉันกำลังพยายามสร้างฟังก์ชั่นที่แทรกข้อความลงในไฟล์โดยไม่ต้องเปลี่ยนไปใช้บัฟเฟอร์ของไฟล์
ฉันรู้ว่าสิ่งนี้สามารถทำได้ด้วยเสียงสะท้อน แต่มีวิธีทำโดยใช้ elisp เท่านั้นหรือไม่
คำตอบ:
ลองใช้ฟังก์ชั่นนี้:
(defun append-string-to-file (string filename)
"Appends STRING to FILENAME."
(interactive)
(append-to-file string nil filename))
append-to-file
ซึ่งทำเช่นนั้น)
คุณต้องสร้างบัฟเฟอร์ปัจจุบันเพื่อทำสิ่งใดกับเนื้อหาของมัน การสร้างบัฟเฟอร์ปัจจุบันเกี่ยวข้องกับ Lisp interpreter มันไม่เกี่ยวข้องกับการแสดงบัฟเฟอร์ในหน้าต่าง พื้นฐานพื้นฐานคือset-buffer
การตั้งค่าบัฟเฟอร์สำหรับการดำเนินงานที่ตามมาและsave-excursion
เพื่อดำเนินการชิ้นส่วนของรหัสและเรียกคืนบัฟเฟอร์ปัจจุบันหลังจากนั้น
มีแมโครจำนวนหนึ่งที่ถูกเรียกwith-SOMETHING
ให้เรียกใช้งานรหัสที่มีการตั้งค่าต่าง ๆ (เช่นบัฟเฟอร์ปัจจุบัน) และเรียกคืนการตั้งค่าเมื่อรหัสออก (ไม่ว่าด้วยเหตุผลใดก็ตามไม่ว่าจะเป็นการออกปกติหรือข้อยกเว้น)
(with-current-buffer "name-of-file-that's-already-open"
(goto-char 42)
(insert "hello"))
หากคุณต้องการเปิดไฟล์และปิดเมื่อเสร็จสิ้นไม่มีwith-
มาโครในไลบรารีมาตรฐาน (คำเตือน: พิมพ์โดยตรงในเบราว์เซอร์)
(save-excursion
(let (buf)
(unwind-protect
(progn
(setq buf (find-file-noselect "filename"))
(when buf
(goto-char 42)
(insert "hello")))
(if buf (kill-buffer buf))))
append-to-file
และwrite-region
ในการอ้างอิง Elisp (ข้อมูล - Elisp - การเขียนไปยังแฟ้ม)