ฉันกำลังพยายามสร้างฟังก์ชั่นที่แทรกข้อความลงในไฟล์โดยไม่ต้องเปลี่ยนไปใช้บัฟเฟอร์ของไฟล์
ฉันรู้ว่าสิ่งนี้สามารถทำได้ด้วยเสียงสะท้อน แต่มีวิธีทำโดยใช้ 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 - การเขียนไปยังแฟ้ม)