Heredoc หรือไวยากรณ์สตริงหลายบรรทัดเทียบเท่าใน Elisp?


10

โดยทั่วไปเสียงกระเพื่อมเรามีห้องสมุดcl-heredocมีเท่ากันใน EmacsLisp?


Emacs Lisp ไม่มีมาโครผู้อ่านดังนั้นจากส่วนหัวของฉันฉันจะบอกว่าไม่มีไม่มี แต่บางทีถ้าคุณอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่คุณจะทำกับสิ่งเหล่านี้อาจมีวิธีการอื่น
wvxvw

1
@wvxvw ฉันอาจจะทำสิ่งที่ฉันต้องการด้วยสตริงที่ยกมาหลายบรรทัดเพียงแค่การหลีกเลี่ยงคำพูดตกแต่งภายในเป็นเพียงการระคายเคืองเท่านั้น
ocodo

3
ทีนี้, สตริงเป็น multiline ใน ELisp (format "next word is quoted %S" "word")วิธีหนึ่งที่จะจับคำพูดที่อยู่ในเครื่องหมายจะผ่านสิ่งที่ต้องการ
wvxvw

@wvxvw ฉันไม่รู้% S ทำอย่างนั้นฉันจะลองดู ขอบคุณมาก! ทำให้เป็นคำตอบและฉันจะยอมรับมัน
ocodo

"% S" คล้ายกับformat ~sคำสั่งCL (เช่นprin1) ดังนั้นมันจะพิมพ์อาร์กิวเมนต์ในวิธีที่เหมาะสมสำหรับผู้อ่านสำหรับสตริงที่จะมีคำพูด
wvxvw

คำตอบ:


6

สตริง Lisp ของ Emacs ทั่วไปสามารถใช้งานได้หลายสาย คุณสามารถใส่บรรทัดใหม่ในพวกเขา

มองไปที่cl-heredocมันดูเหมือนสิ่งที่คุณกำลังมองหาคือสตริง "ดิบ" มีข้อเสนอที่จะเพิ่มสิ่งเหล่านี้ในเวลาที่กลับมา แต่น่าเสียดายที่มันถูกปฏิเสธ (ฉันหวังว่าแทนที่จะคาดหวังว่ามันจะสามารถฟื้นคืนชีพได้) และอิลิสไม่มีคุณสมบัติการขยายความสามารถของเครื่องอ่านที่จำเป็นสำหรับการใช้งานตัวเอง


ครั้งล่าสุดที่หัวข้อของมาโครผู้อ่านที่ผู้ใช้กำหนดขึ้นมาทุกคนดูเหมือนจะชอบ ดังนั้นฉันจึงมั่นใจว่ามีสิ่งกีดขวางเพียงอย่างเดียวคือความพยายามของมนุษย์
Malabarba

2

หากคุณกำลังกำหนดค่า emacs ผ่านไฟล์ init.el คุณอาจต้องการพิจารณาใช้init.orgแทน

จากนั้นคุณสามารถใช้โครงสร้างดังนี้:

#+NAME: arbitrary-text
#+begin_src xml
<some>
  <random src="xml">or whatever... includes syntax highlighting!</random>
</some>
#+end_src


#+begin_src emacs-lisp :var arb-text=arbitrary-text
(eval `(defun a-test ()
         (format "whoop there it is: %S" ,arb-text)))
#+end_src

หากคุณดูใน.elไฟล์ที่สร้างขึ้นคุณจะเห็นสิ่งที่ชอบ:

(let ((arb-text "escaped text here..."))
  (eval `(defun a-test ()
           (format "whoop there it is: %S" ,arb-text))))

คุณสามารถใส่ข้อความและรหัสในลำดับใดก็ได้ คุณสามารถเพิ่มชื่อลงในรายการองค์กรตาราง ฯลฯ

หากนี่เป็นไลบรารีที่คุณอาจไม่ต้องการบังคับให้ผู้ทำงานร่วมกันใช้ 'การเขียนโปรแกรมเชิงเขียน' แล้วคุณสามารถใส่รหัสจำนวนมากลงใน.elไฟล์และสร้าง.elไฟล์เสริมโดยใช้ Org - ตรวจสอบรหัสที่สร้างขึ้นในการควบคุมการแก้ไข


3
บางทีฉันอาจขาดอะไรบางอย่างไป แต่ฉันไม่เห็นว่า init.org เกี่ยวข้องกับสตริงหลายบรรทัด
Malabarba

1
@Malabarba: tl; dr: ถ้าคุณเขียน elisp ในโหมด org คุณสามารถทำอะไรบางอย่างที่ชวนให้นึกถึง heredocs; ไม่เช่นนั้นคุณจะต้องหลบหนีสิ่งต่างๆภายในตัวอักษรสตริงหลายบรรทัด - ส่วนใหญ่` and "`, iirc.
SamB

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