ฉันจะให้ emacs แทรกข้อความลงในไฟล์ได้อย่างไร


5

ฉันกำลังพยายามสร้างฟังก์ชั่นที่แทรกข้อความลงในไฟล์โดยไม่ต้องเปลี่ยนไปใช้บัฟเฟอร์ของไฟล์

ฉันรู้ว่าสิ่งนี้สามารถทำได้ด้วยเสียงสะท้อน แต่มีวิธีทำโดยใช้ elisp เท่านั้นหรือไม่


1
สำหรับการผนวกกับไฟล์ตรวจสอบการทำงานappend-to-fileและwrite-regionในการอ้างอิง Elisp (ข้อมูล - Elisp - การเขียนไปยังแฟ้ม)
Juancho

คำตอบ:


4

ลองใช้ฟังก์ชั่นนี้:

(defun append-string-to-file (string filename)
  "Appends STRING to FILENAME."
  (interactive)
  (append-to-file string nil filename))

สิ่งนี้คาดว่าจะทำงานแบบโต้ตอบได้อย่างไร (และทำไมไม่ใช้เพียงappend-to-fileซึ่งทำเช่นนั้น)
Radon Rosborough

2

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