วิธีการรับโค้ดให้สมบูรณ์ใน emacs?


20

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

คำตอบ:


27

วิธีพื้นฐานที่จะทำงานข้ามประเภทของบัฟเฟอร์ใน emacs คือตัวย่อแบบไดนามิกที่ใช้โดยการกดปุ่มM-/(aka alt+ /)

ซึ่งจะขยายข้อความเพื่อทำซ้ำสตริงอื่น ๆ ที่มีอยู่แล้วในบัฟเฟอร์ปัจจุบันของคุณหรือในบัฟเฟอร์อื่น ๆ ที่เปิดอยู่ในปัจจุบัน

สำหรับการกรอกโค้ดให้ละเอียดมากขึ้นซึ่งเป็นภาษาเฉพาะสำหรับ C ++ หรือ Java (หรืออื่น ๆ ) คุณจะต้องดูแพ็คเกจเทมเพลตโค้ดหรือตัวอย่างข้อมูล มีบางคนกล่าวถึงในคำถามที่เกี่ยวข้องนี้ใน StackOverflow หนึ่งที่เป็นที่กล่าวถึงกันมากในการอภิปรายเหล่านี้คือyasnippet - มีการสาธิต screencast ในโพสต์นี้บนบล็อก emacs


+1 คุณอาจต้องการcomplete.elลองใช้ไลบรารีมาตรฐาน มันเก่ามากและไม่ค่อยมีคนรู้จัก แต่การเติมเต็มในบัฟเฟอร์จะมีประโยชน์ M-x find-library completeจากนั้นอ่านคำอธิบายในไฟล์
ดึง

21

@ คำตอบของดั๊กล้าสมัยเล็กน้อยและการมุ่งเน้นของเขาคือการขยายโค้ดโดยใช้ตัวอย่างที่กำหนดไว้ล่วงหน้า

ฉันคิดว่าคำถามของ OP เกี่ยวกับระบบภายใน (ยกตัวอย่างเช่นชื่อวิธีการเรียนอัตโนมัติ)

  1. ฮิปปี้ขยายใช้ในการเป็นที่นิยม, วิเคราะห์ไวยากรณ์คือแท็ก emacs ดังนั้นจึงรองรับทุกภาษา ctags รองรับ (รวมถึง C ++, Java) แต่ผลลัพธ์ไม่สมบูรณ์เนื่องจาก ctags ใช้นิพจน์ทั่วไปเพื่อวิเคราะห์โค้ดเท่านั้น ดูรายละเอียดinit-hippie-expand.elของฉัน คุณสามารถเริ่มต้นด้วยการตรวจสอบค่าของhippie-expand-try-functions-list

  2. การเติมข้อความอัตโนมัติเป็นสิ่งที่ทันสมัยพร้อม UI แฟนซี (เมนูแบบเลื่อนลงแม้ในหน้าต่างคอนโซล) ถ้าคุณใช้เสียงดังกราวด์เป็นแบ็กเอนด์ Intellisense ดีกว่ามาก ในการทำให้เสียงดังกราวทำงานคุณต้องติดตั้ง auto-complete-clang ซึ่งเป็นปลั๊กอินของ auto-complete รองรับเฉพาะภาษาที่รองรับ (C / C ++ / Obj-C) ดังที่Sylvain Bennerชี้ให้เห็นคุณสามารถใช้emacs-eclimเป็นจาวาแยกวิเคราะห์แบ็คเอนด์ซึ่งเรียกว่าปฏิบัติการของคราส การเติมข้อความอัตโนมัติสามารถรองรับจาวาได้ ดูinit-auto-complete.elของฉันสำหรับรายละเอียด

  3. semanticมีทั้ง UI และเอ็นจิ้นการวิเคราะห์เอนด์เอนด์ มันช้า UI แบบเลื่อนลงนั้นใช้ได้ แต่ต้องมีหน้าต่าง X ผลการ intellisense ดีกว่า ctags และ documenation ก็เกินบรรยายสำหรับฉัน ดูinit-semantic.elสำหรับรายละเอียด

  4. โหมด บริษัทคล้ายกับการทำให้สมบูรณ์อัตโนมัติความแตกต่างคือมันรวมทุกอย่างไว้ในชุดเดียว ตัวอย่างเช่นนักพัฒนา C ++ จะต้องติดตั้งโหมด บริษัท เท่านั้น (การเติมข้อความอัตโนมัติต้องมีปลั๊กอินบุคคลที่สาม) ความแตกต่าง UI ก็คือ บริษัท จะแสดงผู้สมัครโดยอัตโนมัติ ดังนั้นคุณกดปุ่มน้อยลงใน บริษัท เป็นไปได้ที่จะทำสิ่งเดียวกันในการเติมอัตโนมัติหลังจากการปรับแต่ง

โดยสรุปการกรอกข้อมูลอัตโนมัติ บริษัท เป็นที่นิยมมากที่สุดสองทางเลือก ยินดีด้วยการขยายความหมายและฮิปปี้ แต่ก็ใช้น้อยกว่า คนอื่น ๆ พูดถึงเรื่องเล็กเกินไปและฟีเจอร์ของพวกเขาได้รับการกล่าวถึงในสี่เรื่องใหญ่แล้ว ตัวอย่างเช่นการเติมข้อมูลอัตโนมัติสามารถใช้ yasnippet เป็นแหล่งอินพุต (ป้อนอัตโนมัติให้ UI, แต่ผู้สมัครที่แท้จริงจะผลิตโดย yasnippet back end)

ผมขอแนะนำให้ใช้อัตโนมัติสมบูรณ์หรือ บริษัท เป็นปลั๊กอินเสร็จโค้ดที่สำคัญและทั้งความหมายหรือฮิปปี้ขยายเป็นปลั๊กอินเสริม

ฉันใช้โหมด บริษัท และฮิปปี้ขยายเนื่องจาก

  • ตอนนี้ (ปี 2560) โหมด บริษัท ได้รับการดูแลอย่างแข็งขันมากกว่าการเติมอัตโนมัติและมีปลั๊กอินบุคคลที่สามเพิ่มเติม (ตัวอย่างเช่น Latex Latex)

  • ฮิปปี้ขยายไม่ได้ใช้งานมาก แต่ก็ไม่ได้ใช้TABคีย์ซึ่ง บริษัท โหมด / semantic / auto-complete ใช้

ถ้าคุณใช้ บริษัท โหมดสำหรับ C ++ / Java company-backendsคุณอาจต้องการที่จะปรับเปลี่ยน

เคล็ดลับเพิ่มเติมเกี่ยวกับโหมด บริษัท

company-backendsคุณอาจจำเป็นต้องปรับแต่งค่าของ (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))ตัวอย่างเช่นสมมติว่าค่าที่เป็น แล้วถ้าcompany-eclimได้รับไม่ใช่ศูนย์ผู้สมัครcompanyคิดว่าคุณกำลังเขียน Java company-eclimดังนั้นมันจะไม่ทำงานหลังจากแบ็กเอนด์

ทีนี้มาดู(company-dabbrev-code company-gtags company-etags company-keywords)กัน แบ็กเอนด์ทั้งสี่เหล่านี้จะถูกใช้ร่วมกัน ตัวอย่างเช่นแม้ว่าหลังจากcompany-dabbrev-codeดึงผู้สมัครที่ไม่เป็นศูนย์สำเร็จแล้วแบ็กเอนด์อีกสามคนยังคงดำเนินการอยู่

ในโลกแห่งความเป็นจริงมักจำเป็นต้องปรับลำดับของแบ็กเอนด์ใหม่หรือเพิ่มแบ็กเอนด์ใหม่ ( company-rtagsตัวอย่าง)


แพ็คเกจอัตโนมัติที่ดีที่สุดใน Emacs 24 สำหรับน้ำยางคืออะไร?
ปริญญาเอก

@Doctorate ฉันคิดว่าคุณต้องใช้การทำให้สมบูรณ์อัตโนมัติและแหล่งที่มาของemacswiki.org/emacs/AutoCompleteSourcesแต่ฉันเป็นโปรแกรมเมอร์แทนที่จะเป็นผู้ใช้ลาเท็กซ์ดังนั้นคุณควรตรวจสอบอีกครั้งที่ชุมชน Google และชุมชน Emacs ที่นั่น .
เฉินบิน

โปรดทราบว่าโหมด บริษัท ยังรองรับน้ำยาง ดังนั้นฉันขอแนะนำ บริษัท แทนการทำให้สมบูรณ์อัตโนมัติ
chen bin

2

คำตอบสั้น ๆ : ฉันรู้ว่าไม่มี emacs ที่มีประโยชน์สำหรับ java การขยายแบบไดนามิกไม่สนใจไลบรารีในเส้นทางการเรียนของคุณ แต่ไม่ทราบอะไรเกี่ยวกับรหัสที่คุณพิมพ์จะสามารถขยายเป็นข้อความที่มีอยู่แล้วในบัฟเฟอร์ตัวใดตัวหนึ่งเท่านั้น JDE และ emacs-eclim พยายามจัดหาฟังก์ชั่นนี้ แต่โดยส่วนตัวแล้วฉันไม่ประทับใจ


0

คำตอบสั้น ๆ : M-/

คำตอบยาว: RTFM :-)


6
+1 พระเจ้าฉันหวังว่าคำถามต่อไปที่ฉันเห็นคือ "ต้องการความช่วยเหลือในการใช้คำสั่ง RTFM"
rownage

@ ภาพตัดปะ: โอ้นั่นคือ `` info-emacs-manual'` ( C-h r)
SamB

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