ฉันจะเริ่มเรียนรู้ Emacs Lisp ได้อย่างไร


39

พื้นหลัง:

ฉันส่วนใหญ่เป็นผู้ใช้ vi และกำลังแปลงเป็น Emacs

วางพื้นฐานและตอนนี้ใช้สำหรับการเขียนโค้ดใน C และ Python บางอันพร้อมกับวางแผนที่จะทำการแปลง R ด้วย

ฉันเขียน LISP (Common) LISP เป็นเวลาหลายปีกว่าสองทศวรรษที่แล้วตอนที่ฉันเรียนอยู่ระดับปกรณ์ แต่ตอนนี้ฉันหมดแรงลงอย่างมาก (สามารถเขียนสวัสดีโลกได้

คำถาม:

สิ่งที่คุณจะแนะนำสำหรับคนที่อยู่ในตำแหน่งของฉันเพื่อเรียนรู้เกี่ยวกับสภาพแวดล้อม Emacs LISP และเริ่มแฮ็ค Emacs

มีหนังสือบล็อกแหล่งข้อมูลที่ฉันควรอ่านแบบฝึกหัดที่ฉันควรทำหรือไม่

คำตอบ:


11

จากประสบการณ์ของฉันการสอนที่รวมอยู่ใน Emacs Lisp ไม่ได้ช่วยอะไรมาก ในที่สุดฉันก็ใช้ Emacs Lisp Reference แทน

สิ่งที่ได้ผลที่สุด:

ตระหนักว่า Emacs Lisp มีสองด้าน: ภาษาพื้นฐานเองและการมีปฏิสัมพันธ์กับ Emacs แยกสองสิ่งนี้ในความคิดของคุณ มุ่งเน้นที่อดีตก่อน (ไม่ควรยากเกินไปเมื่อคุณเรียนรู้ Lisp ในอดีต) ใช้เว็บไซต์อย่างExcercismเพื่อฝึกฝน

เมื่อคุณเข้าใจพื้นฐานแล้ว (ลูป, ฟังก์ชั่น, ตัวแปร, เงื่อนไข ฯลฯ ) ไปยังส่วนที่เกี่ยวข้องกับ Emacs เอง (เปลี่ยนข้อความเปลี่ยนบัฟเฟอร์ ฯลฯ ) นี่กว้างใหญ่และคุณอาจหลงทางในรายละเอียด มีบางสิ่งที่คุณควรเข้าใจให้ดีเพราะคุณจะใช้มันบ่อยๆ พวกเขาคือ:

  • โต้ตอบ
  • บันทึก-เที่ยว
  • บันทึก-ข้อ จำกัด
  • ตะขอ
  • ฟังก์ชั่นการให้คำปรึกษา
  • กับปัจจุบันบัฟเฟอร์

เมื่อคุณเข้าใจสิ่งเหล่านี้แทนที่จะใช้เวลาตลอดเวลาในการอ่านข้อมูลอ้างอิงของ ELisp ลองคิดถึงปัญหาง่ายๆที่คุณมีกับ Emacs ที่คุณต้องการเขียนและลองแก้ไขด้วย Elisp คุณอาจต้องการความช่วยเหลือในบางขั้นตอนซึ่งเป็นที่ที่ Google สามารถช่วยคุณได้

ตัวอย่างของปัญหาที่ฉันแก้ไขเพื่อฝึก Elisp ของฉัน:

  • เมื่อคุณใช้ org-capture และคุณเขียนข้อความในบรรทัดสุดท้ายของบัฟเฟอร์การจับมันจะไม่ใส่บรรทัดใหม่ในตอนท้ายดังนั้นถ้าฉันมีหัวข้อข่าวใด ๆหลังจากตำแหน่งการจับหัวข้อนั้นจะไม่เป็นบรรทัดแรกอีกต่อไป . การแก้ไขคือการทำให้เบ็ดที่ตรวจสอบว่ามีการขึ้นบรรทัดใหม่และถ้าไม่ให้เพิ่มหนึ่งในตอนท้ายของการจับ

  • เมื่อฉันจับและ refile ในขั้นตอนเดียวมันไม่ได้บันทึกไฟล์ที่รายการถูกเรียบเรียง แต่ถ้าฉันจับได้โดยไม่ต้อง refiling มันก็ทำได้ ฉันแก้ไขความไม่สอดคล้องนี้

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

  • ฆ่าบัฟเฟอร์ทั้งหมดของโหมดใดโหมดหนึ่ง (อาจมีฟังก์ชั่นภายในที่ทำสิ่งนี้อยู่แล้ว แต่ฉันไม่รู้)

สุดท้ายตรวจสอบให้แน่ใจว่าคุณทราบการโยงคีย์ต่อไปนี้:

  • Cx Ce (ประเมินการแสดงออก)
  • Ch v (ค้นหาความหมายและค่าของตัวแปร)
  • Ch f (ค้นหาคำอธิบายของฟังก์ชั่น inbuilt)

33

เป็นคำถามที่ยอดเยี่ยม! นี่คือเส้นทางที่ฉันได้ทำ:

ขั้นตอนที่ 0: อ่านบทช่วยสอนของ Emacs

อ่านบทช่วยสอน Emacs ก่อนสิ่งอื่นใด ดูเหมือนคุณจะทำสิ่งนี้แล้ว ดีมากเลย! อย่างไรก็ตามสำหรับใครก็ตามที่มาที่นี่ในเวลาต่อมานี่คือสถานที่สำหรับการเริ่มต้นการเดินทางของคุณใน Emacs มีบล็อกโพสต์ที่ทำให้เข้าใจผิดมากมาย พวกมันซับซ้อนกว่า Emacs ทำให้ง่าย:

  1. เริ่ม Emacs
  2. กด <RET>

นอกจากนี้คุณยังสามารถเข้าถึงผ่านทางCtrl + h tหรือC-h tในรูปแบบของ Emacs

บทช่วยสอนแนะนำแนวคิดพื้นฐานของ Emacs ทำให้คำศัพท์ทางประวัติศาสตร์ชัดเจนขึ้นและช่วยให้คุณไปถึงภายใน 30 นาที นอกจากนี้ยังกำหนดเวทีสำหรับขั้นตอนต่อไป

เปิด Emacs  กดปุ่มตกลง.  มันง่ายมาก!

ขั้นตอนที่ 1: อ่าน "ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมใน Emacs Lisp"

ขั้นตอนต่อไปคือการอ่านรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมใน Emacs เสียงกระเพื่อม ฉันไม่สามารถแนะนำหนังสือเล่มนี้ได้เพียงพอ มันเขียนได้ดีมาก! มันมาพร้อมกับการติดตั้งมากที่สุด Emacs 1 เพียงกดC-h iและเลือกจากเมนู C-h i m Emacs Lisp Introนอกจากนี้คุณยังสามารถไปได้โดยตรงผ่านทาง

คำนำ

ข้อความนี้เขียนขึ้นเพื่อเป็นการแนะนำเบื้องต้นสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์

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

ขั้นตอนที่ 1.5: เคล็ดลับการพัฒนา Emacs Lisp กับ John Wiegley

เป็นของสายในปี 2015 จอห์นเป็นผู้ดูแลโครงการ Emacs ซาชาชัวทำการสัมภาษณ์กับเขาที่นี่ซึ่งจอห์นพูดถึงพื้นฐานของ Emacs Lisp สภาพแวดล้อมการพัฒนาและให้คำแนะนำที่ดีมากมาย

ขั้นตอนที่ 2: อ่าน OPC (รหัสของผู้อื่น)

2a อ่านซอร์สโค้ด

เนื่องจาก Emacs เป็น "เครื่องมือแก้ไขจอแสดงผลแบบขยายได้ที่ปรับแต่งได้ทำเอกสารด้วยตนเองแบบเรียลไทม์" จึงมีรหัสแหล่งที่มาทั้งหมด เรียนรู้การใช้คุณสมบัติC-h fวิธีใช้สำหรับฟังก์ชั่นและC-h vตัวแปร มีลิงก์ไปยังซอร์สโค้ดเสมอ:

คลิกที่ลิงค์ซอร์สโค้ดเพื่อดูซอร์สโค้ด!

2b อ่านทั้งหมดinit.elของ

ผู้คนจำนวนมากติดตามinit.elไฟล์ของพวกเขาใน Git หรือ Mercurial หาพวกเขาออก เคล็ดลับหนึ่งคือคลิกที่โปรไฟล์ของผู้คนใน StackOverflow โดยเฉพาะอย่างยิ่งemacs.stackexchange.com :

เพื่อนเป็นผู้ใช้พลัง!

พวกเขามักจะมีลิงค์ไปยัง GitHub หรือเว็บไซต์ส่วนตัว:

จ่ายสิ่งสกปรก!

Repos เรียกว่าdotemacsหรือdotfilesค่อนข้างทั่วไป เมื่อเวลาผ่านไปคุณจะเข้าใจว่าโค้ดที่ดีมีลักษณะอย่างไรและโค้ดที่ไม่ดีจะมีลักษณะอย่างไร คุณจะได้เรียนรู้ชื่อที่ยิ่งใหญ่เช่นXah , Sasha Chua , binchen , Magnar Sveen , abo-aboและอื่น ๆ อีกมากมาย มีผู้คนมากมายให้เรียนรู้จาก!

ขั้นตอนที่ 3: แฮ็คกับ Emacs

ท้าทายตัวเองให้เขียนฟังก์ชันที่คุณต้องการ อย่าคัดลอกรหัสสุ่มสี่สุ่มห้า มักจะใช้เวลาในการทำความเข้าใจ หากคุณไม่เข้าใจอย่าใช้! เมื่อคุณใช้เวลาในการทำความเข้าใจโค้ดบางส่วนนอกเหนือจากการเรียนรู้สิ่งใหม่ ๆ คุณมักจะคิดถึงวิธีการปรับปรุงสำหรับกรณีการใช้งานเฉพาะของคุณ นี่เป็นโอกาสที่จะแฮ็ก! ท้ายที่สุดนั่นคือสิ่งที่คุณinit.elต้องการ! ทำผิดพลาดเรียนรู้การแก้ไขข้อบกพร่อง คุณจะพบว่าเนื่องจาก Emacs เขียนใน Elisp การพัฒนาจึงเป็นเรื่องที่น่ายินดี

ขั้นตอนที่ 4: ถามคำถามเกี่ยวกับ emacs.stackexchange.com

ฉันพบว่าชุมชน Emacs ใน StackExchange ชอบคำถาม Elisp ที่ดี ดังนั้นแฮ็คด้วยความมั่นใจว่าคนอื่นจะชื่นชมความพยายามของคุณในการเรียนรู้

ขั้นตอนที่ 5: ตอบคำถามใน emacs.stackexchange.com

ไม่มีอะไรจะอธิบายความเข้าใจของคุณเช่นพยายามอธิบายอะไรบางอย่าง คุณจะพบคำตอบสำหรับคำถามที่คุณไม่เคยรู้มาก่อน

ข้อสรุป

เมื่อเวลาผ่านไปคุณจะพบว่าตัวเองสามารถสร้างคำตอบได้เร็วขึ้นและตอบคำถามของคนอื่น เช่นเดียวกับการเขียนโปรแกรมทั้งหมดมันอาจทำให้หงุดหงิด อย่างไรก็ตามอย่าลืมตัดสินตัวเองในวันนี้กับตัวเองเมื่อวานนี้ บางคนแฮ็ค Emacs มา 30 ปีแล้ว! อย่างไรก็ตามส่วนใหญ่คุณจะพบว่า Emacs ยินดีที่ได้ทำงานด้วยและอิสรภาพที่ให้คุณมีแรงบันดาลใจ

แฮ็คมีความสุข! :)

PS: ตรวจสอบแพคเกจความชั่วร้าย


1 บางการติดตั้งไม่ได้มาพร้อมกับมัน ตัวอย่างเช่นผู้ใช้ Debian ต้องติดตั้งแยกต่างหาก มันเป็นประเภทโง่แต่ก็เก็บไว้ใน Repos เพิ่ม repo แบบไม่เสียค่าใช้จ่าย/etc/apt/sources.listโดยต่อnon-freeท้ายรายการแต่ละรายการ:

deb http://http.us.debian.org/debian stable main contrib non-free

1
รู้สึกเหมือนฉันเพิ่งเข้าชม quora
user3496846

10

ฉันแนะนำ "Emacs Lisp Intro"

"Emacs Lisp Intro" อาจมีอยู่แล้วในรูปแบบข้อมูลภายใน Emacs ของคุณ ลองC-h i m Emacs Lisp Intro RETหรือประเมิน(info "(eintr) Top")ใน Emacs

หากสิ่งนี้ล้มเหลวในการค้นหาเว็บสำหรับ "Emacs Lisp Intro"


7
  1. เริ่มต้นด้วยหน้าวิกิพีเดีย Emacs เรียนรู้ Emacs เสียงกระเพื่อม

    ไม่ว่าหน้านั้นจะสอน Emacs Lisp ให้คุณ มันจะชี้ไปที่แหล่งการเรียนรู้ - สิ่งที่คุณกำลังมองหาที่นี่พร้อมคำถามของคุณ ผู้ใช้หลายคนสนับสนุนและแก้ไขมันในช่วงเวลาหลายปี ที่แสดงข้อดีและข้อเสีย wrt บล็อกของผู้ใช้คนหนึ่ง คุณภาพของคำแนะนำนั้นแน่นอนว่าหลากหลายเพราะความหลากหลายของอินพุต

  2. นอกเหนือจากนั้น - ทุกสิ่งที่คนอื่น ๆ ที่นี่พูดโดยเฉพาะอย่างยิ่งเริ่มต้นด้วย doc ของ Emacs ในตัว:

    • คู่มือ Elisp - ส่วนใหญ่เป็นข้อมูลอ้างอิง แต่มีคำแนะนำการใช้งานที่ดีและข้อมูลแนวคิดด้วย มันสร้างไว้ใน Emacs: C-h iจากนั้นเลือกคู่มือ Elisp

    • The Emacs Lisp Intro - คำแนะนำทีละขั้นตอนเพื่อ Lisp และ Emacs Lisp นอกจากนี้ยังสร้างขึ้นใน Emacs C-h iและสามารถใช้ได้จาก

  3. เนื่องจากคุณใช้ Common เสียงกระเพื่อมมันจะเป็นซุปเปอร์ง่ายต่อการรับ Emacs เสียงกระเพื่อม พิจารณาตัวเองโชคดีเกี่ยวกับเรื่องนี้

    หากคุณเคยใช้ Common LISP (หรือ Zeta Lisp หรืออะไรก็ตาม) บนเครื่อง LISP ประสบการณ์จะคล้ายกัน คุณสามารถคิดว่า Emacs เป็นสภาพแวดล้อมเสียงกระเพื่อมที่ยอดเยี่ยม คุณสามารถไปจากศูนย์ถึง 60 ในเวลาไม่นานเมื่อเรียนรู้

  4. มีความสุข!


2

ในฐานะที่เป็นทบทวนเสียงกระเพื่อมฉันขอแนะนำให้สามบทแรกของปีเตอร์ Norvigs กระบวนทัศน์ของโปรแกรมปัญญาประดิษฐ์ สิ่งเหล่านี้จะทำให้คุณได้รู้จักกับ Lisp อย่างรวดเร็วและรวดเร็วซึ่งจะทำให้คุณกลับมาสู่ความเป็นจริงได้อย่างรวดเร็ว

สำหรับ noobs ทั้งหมดมีLISP ทั่วไป: การแนะนำอย่างนุ่มนวลเกี่ยวกับการคำนวณสัญลักษณ์ซึ่งสอนแนวคิดเดียวกัน แต่ในระดับที่ต่ำกว่ามาก

หนังสือทั้งสองเล่มมีให้ออนไลน์ฟรี

หลังจากผ่านไปหนึ่งข้างต้นคุณสามารถอ่านทั้งหมด Elisp แท็กโพสต์ในnullprogram.comและผ่านการอ่านคู่มือที่masteringemacs.org หากต้องการเรียนรู้เกี่ยวกับข้อผิดพลาดทั่วไปที่อ่านคำถามยอดนิยมที่นี่จะเป็นประโยชน์ สำหรับปัญหาเฉพาะค้นหาเว็บไซต์นี้rosettacodeหรือเครื่องมือค้นหาที่คุณชื่นชอบ

หลังจากที่คุณคุ้นเคยกับข้อมูลพื้นฐานแล้วคู่มือข้อมูลมักจะตอบคำถามที่เหลืออยู่ส่วนใหญ่ที่เกิดขึ้นเมื่อทำการแฮ็คบน Emacs


1

เนื่องจากคุณมีพื้นหลังใน Common LISP และคุณ "ผ่านขั้นพื้นฐาน" จึงไม่มีประเด็นที่จะหายไปใน "ข้อมูลเบื้องต้นเกี่ยวกับการเขียนโปรแกรมใน Emacs Lisp"

สิ่งที่คุณสามารถทำได้ทันที (ฉันไม่มีภูมิหลังใน CL และทำงานให้ฉัน) คือ:

1) ค้นหาโหมดที่คุณใช้และพยายามเพิ่มฟังก์ชั่นคุณจะพบความช่วยเหลือในการอ้างอิง Emacs Lisp

2) เขียนไฟล์ที่กำหนดเองของคุณเองด้วยฟังก์ชั่นง่าย ๆ ของคุณเองที่นี่อีกครั้งใช้ Emacs Lisp Reference

รายการ help-gnu-emacs มีประโยชน์อย่างยิ่ง


1

สิ่งที่คุณจะแนะนำสำหรับคนที่อยู่ในตำแหน่งของฉันเพื่อเรียนรู้เกี่ยวกับสภาพแวดล้อม Emacs LISP และเริ่มแฮ็ค Emacs

ฉันไม่คิดว่าคุณจะต้องอ่านอะไรที่เฉพาะเจาะจงในเสียงกระเพื่อม emacs มันไม่มีความลับที่ว่าถ้าคุณต้องการทำบางสิ่งใน Emacs โอกาสที่คุณจะต้องค้นหาคำสั่งที่ถูกต้องหรือมีคนเขียนรหัสแล้วและตอนนี้มันอยู่ที่ไหนสักแห่งบนหน้า wiki หรือ github หรือสร้างเป็นปลั๊กอิน . เพียงแค่คัดลอกโค้ดนั้นแล้วอ่านมันคุณจะได้เรียนรู้ส่วนแบ่งของ Emacs ที่กระฉับกระเฉงเมื่อคุณพอใจกับ emacs ของคุณ

หากคุณต้องการได้รับแนวคิดบางอย่างเกี่ยวกับวิธีปรับแต่ง Emacs การกำหนดค่าที่กำหนดเองโดยคนอื่นอาจเป็นแหล่งของภูมิปัญญาที่ดี รายการที่เลือกของการกำหนดค่าต่างๆที่คุณสามารถหาได้ที่นี่ แม้ว่าการมีวิสัยทัศน์ของคุณจะทำงานได้ดีขึ้นและการเยี่ยมชม. emacs ของผู้อื่นมักจะรับประกันเมื่อคุณต้องการคำตอบบางคำถามเท่านั้น (เช่นฉันจะจัดโครงสร้างรหัส / แพ็คเกจของฉันได้อย่างไร) หรือคัดลอกรหัสเพื่อเป้าหมายเฉพาะของคุณ

การเรียกดูMELPAทำให้ฉันต้องติดตั้งและลองแพ็คเกจหนึ่งโหล

หากคุณกำลังจะพัฒนาปลั๊กอินฉันพบว่าการอ่านโค้ดของปลั๊กอินที่คุณชื่นชอบสามารถทำให้คุณเริ่มต้นได้อย่างรวดเร็ว

เมื่อคุณใช้ vi ลองดูโหมดความชั่วมันทำงานได้ดีมากสำหรับฉัน ฉันจะแนะนำหางเสือด้วยhelm-apropos(หรือเพียงแค่aproposถ้าคุณไม่ต้องการhelm) คำสั่งเพื่อให้การเดินทางของคุณง่ายขึ้น

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


1

เส้นทาง Elisp บน Exercism.io เป็นวิธีที่สนุกในการพัฒนาทักษะของคุณ แบบฝึกหัดนั้นเน้นที่ elisp มากกว่าบน Emacs แต่จะครอบคลุมพื้นฐานที่ดีเช่นนิพจน์ปกติโครงสร้างข้อมูลคณิตศาสตร์ ฯลฯ


คุณสามารถปรับปรุงการอ้างอิงนั้นได้หรือไม่ (เช่นมีลิงก์) คุณช่วยสรุปสิ่งที่พบได้ที่นี่ได้ไหม (แบบฝึกหัดบางอย่างดูเหมือน)
ดึง

Exercism.ioเป็นเว็บไซต์ที่คุณสามารถเลือกภาษาและแก้ไขปัญหาต่าง ๆ ได้ - และดูวิธีแก้ไขปัญหาของผู้อื่น ฉันได้ค้นพบวิธีการแก้ปัญหาของคนอื่นที่คุณเพิ่งใช้เวลาในการแก้ปัญหาเป็นวิธีที่ดีในการเรียนรู้คุณสมบัติใหม่
ด้วงบี

0

ดูเหมือนว่าคำตอบของ Loren Ipsum นั้นครอบคลุมได้ดีทีเดียว

https://emacs.stackexchange.com/a/47320/21433

ฉันแค่เพิ่มว่าฉันสมมติว่าคุณรู้พื้นฐานของเสียงกระเพื่อม ที่จะช่วยคุณ แต่ไม่จำเป็น (ฉันจะกลับไปที่)

วิธีหนึ่งในการเรียนรู้คือการแฮ็คหรือแก้ไขโหมด / ส่วนขยายที่มีอยู่ ฉันเรียนรู้มันกลับมาในปี 93 โดยแฮ็คที่ไฟล์โหมดภาษา Ada มันเป็นหนึ่งในประสบการณ์ที่สนุกที่สุดที่ฉันได้กลับไปเรียนที่วิทยาลัย

ดังนั้นคุณสามารถทำได้ด้วยภาษาที่คุณเลือกพูดโหมด Java หรือโหมด Lisp หรือแม้แต่ไฟล์โหมด Elisp

เปลี่ยนเพิ่มมาโคร ฯลฯ นั่นคือสิ่งที่ฉันทำ

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