ใช้ Emacs เป็น IDE


169

ปัจจุบันเวิร์กโฟลว์ของฉันกับ Emacs เมื่อฉันเข้ารหัสใน C หรือ C ++ เกี่ยวข้องกับสาม windows ใหญ่ที่สุดทางด้านขวามีไฟล์ที่ฉันทำงานด้วย ด้านซ้ายแบ่งออกเป็นสองส่วนด้านล่างเป็นเชลล์ที่ฉันใช้พิมพ์คอมไพล์หรือสร้างคำสั่งและด้านบนมักเป็นเอกสารหรือไฟล์ README ที่ฉันต้องการปรึกษาขณะทำงาน ตอนนี้ฉันรู้แล้วว่ามีผู้ใช้ Emac ที่มีความเชี่ยวชาญจำนวนหนึ่งออกมาและฉันอยากรู้ว่า Emacs อื่น ๆ มีประโยชน์อย่างไรถ้าจุดประสงค์คือใช้เป็น IDE ที่สมบูรณ์ โดยเฉพาะอย่างยิ่ง IDEs ส่วนใหญ่มักจะเติมเต็มฟังก์ชั่นเหล่านี้คือบางรูปแบบหรืออื่น ๆ :

  • โปรแกรมแก้ไขซอร์สโค้ด
  • ผู้รวบรวม
  • แก้จุดบกพร่อง
  • การค้นหาเอกสาร
  • การควบคุมเวอร์ชัน
  • คุณสมบัติ OO เช่นการค้นหาชั้นเรียนและผู้ตรวจสอบวัตถุ

สำหรับสองสามอย่างนี้ค่อนข้างชัดเจนว่า Emacs สามารถใช้งานฟังก์ชั่นเหล่านี้ได้อย่างไร แต่ส่วนที่เหลือล่ะ นอกจากนี้หากภาษาใดภาษาหนึ่งต้องให้ความสำคัญฉันจะบอกว่ามันควรจะเป็น C ++

แก้ไข:ผู้ใช้คนหนึ่งชี้ให้เห็นว่าฉันควรจะเฉพาะเจาะจงมากขึ้นเมื่อฉันพูดว่า 'ส่วนที่เหลือ' ส่วนใหญ่ฉันอยากรู้เกี่ยวกับการควบคุมเวอร์ชันที่มีประสิทธิภาพเช่นเดียวกับการค้นหาเอกสาร ตัวอย่างเช่นใน SLIME การค้นหาไฮเปอร์สเปคอย่างรวดเร็วบนฟังก์ชั่น Lisp ค่อนข้างง่าย มีวิธีที่รวดเร็วในการค้นหาบางอย่างในเอกสาร C ++ STL (ถ้าฉันลืมไวยากรณ์ที่แน่นอนของhash_mapเป็นต้น)?


5
คำถามและคำตอบทั้งหมดจะหายไปโดยสิ้นเชิงจุด IDE หลัก แต่ก่อนอื่นอย่าเข้าใจฉันผิด: ฉันคิดว่าไม่มี IDE ตัวเดียวที่นั่น (นอกเหนือจาก Lisp / Scheme ที่หายาก) ที่มาทุกที่ใกล้กับสิ่งที่ Emacs สามารถให้ได้ อย่างไรก็ตาม IDEs ทันสมัยทำสิ่งเช่นนี้เน้นทันทีรหัสข้อผิดพลาดน่าจะเป็น (แม้ใน asts ไม่ใช่ compilable บางส่วน) IntelliJ IDEA ทำเช่นนั้น: หากคุณใช้พูดว่า@NotNullมันจะเตือนคุณเกี่ยวกับการละเมิดที่อาจเกิดขึ้นแบบเรียลไทม์ จากนั้นมี"การเข้ารหัสโดยเจตนา" ทั้งหมด : มันใช้งานไม่ได้ (ยัง) ภายใต้ Emacs
SyntaxT3rr0r

18
อีกพื้นที่ที่ IDE ที่ดีสามารถส่องแสงได้จริง: การเติมโค้ดตามบริบทให้เสร็จสมบูรณ์ (อีกครั้งแม้ในไฟล์ต้นฉบับที่เป็นกลางและไม่สามารถคอมไพล์ได้) การเติมโค้ดตามบริบทให้กับ p0wns hippie-expandทุกวันเหมือนมันไม่ตลกเลย: มันทำให้ Emacs น่าละอาย อีกครั้งฉันเสียใจมากที่ IDE "text editor" มีราคาถูกอ่อนแองี่เง่าและน่าขยะแขยงเมื่อเทียบกับ Emacs แต่ IDEs ที่ดีส่องแสงในหลายพื้นที่ (เช่นการปรับโครงสร้างใหม่การทำให้โค้ดตามบริบทเสร็จสิ้นการเตือนแบบเรียลไทม์และอื่น ๆ ) ซึ่ง Emacs นั้นไม่มีที่ใดเลย ส่ง Emacs ให้ฉันกลาง IDE ของฉันที่กล่าวมา ฉันอยากได้วันนั้น
ไวยากรณ์ T3rr0r

สิ่งที่เกี่ยวกับรหัสยุบ
AlwaysLearning

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

คำตอบ:


76

คุณจะต้องมีความเฉพาะเจาะจงกับสิ่งที่คุณหมายถึงโดย "ส่วนที่เหลือ" ยกเว้นผู้ตรวจสอบวัตถุ (ที่ฉันรู้) emacs ทำทุกอย่างได้อย่างง่ายดาย

  • บรรณาธิการ (ชัดเจน)
  • คอมไพเลอร์ - เพียงแค่เรียกใช้M-x compileและป้อนคำสั่งคอมไพล์ของคุณ จากตรงนั้นคุณสามารถทำได้M-x compileและใช้ค่าเริ่มต้น Emacs จะจับข้อผิดพลาดของคอมไพเลอร์ C / C ++ (ทำงานได้ดีกับ GCC) และช่วยคุณนำทางไปยังบรรทัดที่มีคำเตือนหรือข้อผิดพลาด
  • การดีบั๊ก - ในทำนองเดียวกันเมื่อคุณต้องการดีบั๊กพิมพ์M-x gdbและมันจะสร้างบัฟเฟอร์ gdb ด้วยการผูกพิเศษ
  • การค้นหาเอกสาร - emacs มีการผูก CScope ที่ยอดเยี่ยมสำหรับการนำทางโค้ด สำหรับเอกสารอื่น ๆ : Emacs ยังมีตัวอ่าน manpage และสำหรับทุกสิ่งมีเว็บและหนังสือ
  • การควบคุมเวอร์ชัน - มีการผูก Emacs จำนวนมากสำหรับแบ็กเอนด์ VCS ต่างๆ (CVS, SCCS, RCS, SVN, GIT ทั้งหมดอยู่ในใจ)

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

การค้นหาของ Google จะไม่มีข้อสงสัยเปิดเผยตัวอย่างเพิ่มเติม

ตามที่ลิงค์ที่สองแสดงให้เห็นถึงการค้นหาฟังก์ชั่น (และอะไรก็ตาม) ในเอกสารอื่นสามารถทำได้แม้ว่าจะไม่ได้รับการสนับสนุนจากกล่อง


3
ไม่ควรที่จะเป็น "Mx รวบรวม"?
Svante

1
ฉันคิดว่า GNU ทั่วโลกดีกว่า CScope ในทุกวันนี้: gnu.org/software/global
JürgenHötzel

@ JürgenHötzel: ฉันไม่ได้ใช้ Emacs มาซักพักนึงแล้ว ในเวลานั้นฉันใช้ GNU ร่วมกับ CScope, IIRC ฉันจะไม่แปลกใจถ้าโลกมี CScope นอกวิวัฒนาการ
Ben Collins

บังคับใช้การสนับสนุนด้วย <a href=" p4el.sourceforge.net/p4.el.html"> p4.el </ a >
forksandhope

29

ฉันต้องแนะนำEmacs Code Browserเป็นสภาพแวดล้อม IDE สไตล์ "ดั้งเดิม" สำหรับ emacs

แก้ไข : ตอนนี้ฉันยังแนะนำMagitให้สูงกว่าอินเตอร์เฟส VCS มาตรฐานใน emacs


คุณควรจะสามารถแก้ไขการโพสต์ดูเหมือนว่าคุณมีตัวแทนเพียงพอ
baudtack

19

แทนที่จะลองใช้คำสั่ง make ในหน้าต่างเชลล์คุณลองใช้ Mx คอมไพล์แล้วหรือยัง? มันจะเรียกใช้คำสั่ง make ของคุณแสดงข้อผิดพลาดและในหลายกรณีทำให้มันง่ายมากที่จะข้ามไปยังบรรทัดของรหัสที่ทำให้เกิดข้อผิดพลาดหากการส่งออกมีชื่อไฟล์และหมายเลขบรรทัด

หากคุณเป็นแฟนของ IDE คุณอาจต้องการดูแพ็คเกจสปีดบาร์ของ emacs (Mx speedbar) และหากคุณยังไม่ได้เรียนรู้เกี่ยวกับวิธีใช้ตารางแท็กเพื่อสำรวจรหัสของคุณ


15

มีมุมของ emacs ที่ค้นพบครั้งหนึ่งที่ทำให้คุณมีประสิทธิภาพมากขึ้นในรูปแบบที่คุณไม่เคยคิด ดังที่คนอื่น ๆ พูดถึงการใช้แท็กเป็นวิธีที่ยอดเยี่ยมและรวดเร็วในการซูมไปรอบ ๆ ซอร์สโค้ดของคุณและการใช้ M- / (dabbrev-expand) มักทำสิ่งที่คุณคาดหวังเมื่อกรอกชื่อตัวแปร

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

ฟลัช - ไลน์, ฟิลด์เรียงลำดับตัวเลข, แทนที่ - regexp และฟังก์ชันสี่เหลี่ยมผืนผ้าจะมีประโยชน์มากสำหรับการถ่ายโอนข้อมูลจากเครื่องมือบางอย่างและแปลงเป็นข้อมูลที่มีประโยชน์เช่นโปรแกรม elisp หรือสเปรดชีตที่คั่นด้วยจุลภาค

ฉันเขียนหน้าเกี่ยวกับ IDE เช่นเดียวกับสิ่งที่คุณสามารถทำได้กับ emacs

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

การเรียนรู้ elisp เป็นอีกวิธีที่ยอดเยี่ยมในการตอบคำถามของคุณว่า emacs อื่นสามารถทำอะไรได้มากกว่าที่ IDE ทั่วไปสามารถทำได้

ตัวอย่างเช่นฉัน blogged เกี่ยวกับการเขียนฟังก์ชั่นผู้ช่วย Perforce เช่นโทษ (การเขียนของคุณเองหมายความว่าคุณสามารถทำให้มันทำงานได้ตามที่คุณต้องการ) ...

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html

ฉันยังเขียนโค้ดที่สร้างความคิดเห็นแบบไดนามิกสำหรับฟังก์ชั่น ณ จุดที่ตรงกับมาตรฐานการเข้ารหัสที่ฉันทำงานด้วย

ไม่มีรหัส elisp ของฉันที่ยอดเยี่ยมเป็นพิเศษและส่วนใหญ่มีอยู่แล้วในห้องสมุด แต่มีประโยชน์มากที่จะทำให้ emacs ทำสิ่งที่กำหนดเองที่เพิ่งเกิดขึ้นระหว่างวันทำงาน


10

คุณสามารถหาคำอธิบายรายละเอียดของการรวม emacs และควบคุมเวอร์ชันบนเว็บไซต์ของฉัน ฉันยังทำงานเกี่ยวกับบทความเกี่ยวกับการใช้ Emacs เป็นสภาพแวดล้อมการพัฒนาสำหรับหลายภาษาเช่น C / C ++, Java, Perl, Lisp / Scheme, Erlang ฯลฯ


8

สำหรับการควบคุมเวอร์ชันมีหลายสิ่งที่คุณสามารถใช้ได้ขึ้นอยู่กับระบบควบคุมเวอร์ชันที่คุณใช้ แต่ฟังก์ชั่นบางอย่างนั้นเป็นเรื่องธรรมดาสำหรับทุกคน

vc.elเป็นวิธีในตัวเพื่อจัดการการควบคุมเวอร์ชันในระดับไฟล์ มันมีแบ็กเอนด์สำหรับระบบควบคุมเวอร์ชันส่วนใหญ่ ตัวอย่างเช่นแบ็กเอนด์การโค่นล้มมาพร้อมกับ Emacs และมีแบ็กเอนด์คอมไพล์และอื่น ๆ ที่มีอยู่จากแหล่งอื่น ๆ

คำสั่งที่มีประโยชน์ที่สุดคือCx vv (vc-next-action) ซึ่งทำการกระทำถัดไปที่เหมาะสมสำหรับไฟล์ที่คุณกำลังเยี่ยมชม นี่อาจหมายถึงการอัปเดตจากที่เก็บหรือยอมรับการเปลี่ยนแปลง vc.el จะทำการรีบูตCx Cqเพื่อเช็คอินและเช็คเอาท์หากคุณใช้ระบบที่ต้องการ (เช่น RCS)

คำสั่งที่มีประโยชน์มาก ๆ คือCx vlและCx v =ที่แสดงล็อกและ diff ต่าง ๆ ในปัจจุบันสำหรับไฟล์ที่คุณกำลังใช้

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

ส่วนใหญ่เหล่านี้ได้รับอิทธิพลอย่างมากหรือตามpcl-cvs / pcvs ดั้งเดิมสำหรับ CVS มีแม้กระทั่งสองของพวกเขาที่มาพร้อมกับการโค่นล้มpsvn.elและdsvn.el มีแพ็คเกจสำหรับคอมไพล์ ฯลฯ


8

โอเคทุกคนที่นี่ให้คำแนะนำที่สมบูรณ์แบบเพื่อทำให้ emacs เป็น IDE ที่ยอดเยี่ยม

แต่ทุกคนควรจำไว้ว่าเมื่อคุณปรับแต่ง emac ของคุณด้วยส่วนขยายจำนวนมาก (โดยเฉพาะกับตัวตรวจสอบการบินการค้นหานิยามฟังก์ชัน ฯลฯ ) emacs ของคุณจะโหลดช้ามากสำหรับเครื่องมือแก้ไข

server modeเมื่อต้องการแก้ปัญหานี้ผมอยากจะแนะนำให้ใช้ใน emacs

มันค่อนข้างใช้งานง่ายไม่จำเป็นต้องปรับแต่งไฟล์ init ของคุณ คุณเพียงแค่ต้องเริ่ม emacs ในโหมด daemon

emacs --daemon

สิ่งนี้จะสร้างเซิร์ฟเวอร์ emacs จากนั้นคุณสามารถเชื่อมต่อได้จากเทอร์มินัลหรือจาก gui ฉันขอแนะนำให้สร้างนามแฝงบางอย่างเพื่อให้ง่ายต่อการโทร

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

วิธีนี้ emacs จะยิงได้เร็วขึ้นกว่า gedit สัญญา

ปัญหาที่เป็นไปได้ข้อหนึ่งที่นี่หากคุณใช้ emacs daemon จากผู้ใช้ชั่วคราวคุณอาจไม่สามารถเชื่อมต่อเซิร์ฟเวอร์ emacs rootได้

ดังนั้นหากคุณต้องการเปิดไฟล์ที่มีการเข้าถึงรูท ใช้trampแทน เพียงแค่เรียกใช้ไคลเอนต์ emacs ของคุณกับผู้ใช้ปกติของคุณและเปิดไฟล์เช่นนี้

C-x C-f
/sudo:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...` 

สิ่งนี้ทำให้ชีวิตของฉันง่ายขึ้นฉันสามารถเปิด python IDE แบบกำหนดเองของฉันได้อย่างหนักในเวลาไม่กี่วินาทีด้วยวิธีนี้ คุณอาจต้องการเพิ่ม emacs --daemon ในการเริ่มต้นระบบของคุณหรือสร้างไฟล์เดสก์ท็อปสำหรับ emacsclient นั่นขึ้นอยู่กับคุณ

ข้อมูลเพิ่มเติมเกี่ยวกับ emacs daemon และไคลเอ็นต์ emacs สามารถพบได้ที่ wiki;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient


1
ฉันรู้ว่านี่คือห้าปีต่อมา แต่ฉันใช้มันในเวลานั้นเช่นกัน: ถ้าคุณตั้งค่าEDITOR="emacsclient -t" VISUAL="emacsclient -c"คุณสามารถแก้ไขด้วย sudo ด้วยsudo -eหรือsudoeditซึ่งบางครั้งก็ใช้ TRAMP (โดยปกติจะเป็นเหตุผลการตรวจสอบ) นอกจากนี้คุณยังสามารถเรียกใช้ emacsclient ด้วย--alternate-editor= ( ต้องการพื้นที่ในตอนท้าย) และมันจะเริ่มต้นภูตหากมันไม่ได้ทำงานซึ่งไม่จำเป็นต้องใส่ daemon ในการเริ่มต้นระบบถ้าคุณเต็มใจที่จะรอในครั้งแรกที่คุณ รันโปรแกรมแก้ไขในการบู๊ตแต่ละครั้ง
Darael

7

ฉันยอมรับว่าคุณควรเรียนรู้เกี่ยวกับการรวบรวม Mx (ผูกและ Mx ข้อผิดพลาดต่อไปเป็นลำดับคีย์สั้น)

เรียนรู้เกี่ยวกับการผูกสำหรับการควบคุมเวอร์ชัน (เช่น vc-diff, vc-next-action ฯลฯ )

ดูการลงทะเบียน คุณไม่เพียง แต่สามารถจำตำแหน่งในบัฟเฟอร์ได้ แต่การกำหนดค่าหน้าต่างทั้งหมด (Cx rw - window-configuration-to-register)


6

เป็นจุดเริ่มต้น (ซึ่งอาจจะไม่ใช่ที่เห็นได้ชัด) สำหรับการสำรวจ VC คุณสมบัติของ Emacs เป็นMx VC-ดำเนินการถัดไป

มันเป็น "การดำเนินการควบคุมเวอร์ชันต่อไปแบบลอจิคัล" ในไฟล์ปัจจุบันขึ้นอยู่กับสถานะของไฟล์และ VC backend ดังนั้นหากไฟล์ไม่ได้อยู่ภายใต้การควบคุมเวอร์ชันมันจะทำการลงทะเบียนหากไฟล์นั้นมีการเปลี่ยนแปลงการเปลี่ยนแปลงจะถูกส่งไป ฯลฯ

ใช้เวลาเล็กน้อยทำความคุ้นเคย แต่ฉันคิดว่ามันมีประโยชน์มาก

ปุ่มลัดเริ่มต้นคือCx vv


4

มีความเป็นTFS.el เพื่อบูรณาการเข้ากับ Microsoft emacs TFS มันทำงานร่วมกับ TFS ใด ๆ รวมถึง TFS ที่รัน Codeplex.com

ขั้นตอนพื้นฐานในการตั้งค่า:

  1. วาง tfs.el ในโหลดพา ธ ของคุณ

  2. ในไฟล์. emacs ของคุณ:

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
  3. รวมถึงในไฟล์. emacs ของคุณตั้งค่าการเชื่อมโยงคีย์โลคัลหรือโกลบอลสำหรับคำสั่ง tfs ชอบมาก:

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)

อืม ... นี่เป็นการสนับสนุนอย่างจริงจังในการใส่รหัสผ่านของคุณในข้อความธรรมดาในไฟล์. emacs ของคุณหรือไม่
TED

@TED ​​- ไม่เพียงแค่ภาพประกอบ ความลับควรเก็บไว้ที่อื่นเพื่ออ่านจาก elisp
Cheeso

3

คอมไพล์, ข้อผิดพลาดถัดไปและข้อผิดพลาดก่อนหน้าคือคำสั่งที่สำคัญทั้งหมดสำหรับการพัฒนา C ++ ใน Emacs (ใช้งานได้ดีกับเอาต์พุต grep เช่นกัน) Etags, Visit-tags-table และ find-tag มีความสำคัญเช่นกัน complete.el เป็นหนึ่งในแฮ็คที่ไม่ได้รับการกล่าวขานของศตวรรษที่ 20 และสามารถเร่งความเร็วการแฮ็ก C ++ ของคุณได้ด้วยลำดับความสำคัญ โอ้และอย่าลืมความยุ่งเหยิง

ฉันยังไม่ได้เรียนรู้วิธีใช้การควบคุมเวอร์ชันโดยไม่ต้องไปที่เชลล์ แต่ตอนนี้ฉันกำลังใช้งานบ่อยขึ้น (ด้วย git) ฉันอาจต้องทำ


3

คุณอาจพบว่าtabbarมีประโยชน์ มันเลียนแบบพฤติกรรมเดียวที่ฉันพลาดเมื่อย้ายจาก Eclipse ไปยัง Emacs ผูกพันกับ "," และ "." สำหรับการย้ายไปยังแถบแท็บก่อนหน้าและถัดไปจะทำให้คุณไม่ต้องเปลี่ยนบัฟเฟอร์โดย Ctrl-x b ตลอดเวลา

น่าเสียดายที่หน้าเว็บดังกล่าวไม่มีเวอร์ชั่นที่ถูกต้องในการดาวน์โหลด อย่างไรก็ตาม Ubuntu ส่วนใหญ่ส่งมอบในแพ็คเกจ emacs-goodies ของพวกเขา


1
เยี่ยมมากฉันกำลังมองหาวิธีที่จะได้รับ tabbar เวอร์ชันใหม่ สำหรับผู้ที่ไม่ได้อยู่ใน Ubuntu คุณสามารถค้นหาได้ที่นี่ packages.ubuntu.com/karmic/emacs-goodies-el
Ibrahim

3

ฉันใช้ emacs บน Windows โมดูลคอมไพล์ดี แต่ฉันต้องการคอมไพล์อย่างชาญฉลาดเกี่ยวกับบรรทัดคำสั่งคอมไพล์ที่แนะนำ เป็นไปได้ที่จะใช้ "ตัวแปรไฟล์" เพื่อระบุcompile-commandแต่ฉันต้องการบางสิ่งที่ฉลาดกว่านั้น ดังนั้นฉันจึงเขียนฟังก์ชันเล็กน้อยเพื่อช่วย compileมันคาดเดาคำสั่งรวบรวมการใช้งานเพื่อแจ้งให้ผู้ใช้กับเมื่อทำงาน

ฟังก์ชั่นการเดาจะค้นหาไฟล์ vbproj หรือ csproj หรือ sln และหากพบจะแนะนำ msbuild จากนั้นจะดูที่ชื่อไฟล์บัฟเฟอร์และขึ้นอยู่กับว่าแนะนำสิ่งต่าง ๆ ไฟล์. wxs หมายความว่าเป็นโครงการ WIX และคุณอาจต้องการสร้าง MSI ดังนั้นตรรกะการเดาจึงแนะนำคำสั่ง nmake สำหรับ MSI หากเป็นโมดูล Javascript คำแนะนำคือให้รัน jslint-for-wsh.js เพื่อขยิบไฟล์. js ในฐานะทางเลือกมันแนะนำ nmake

รหัสที่ฉันใช้มีลักษณะดังนี้:

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

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


แก้ไขตอนนี้มี " smarter-compile.el " ซึ่งจะนำความคิดนี้ไปอีกขั้นหนึ่ง


2

ในการค้นหาเอกสาร: ขึ้นอยู่กับภาษาการเขียนโปรแกรมของคุณ

ไลบรารี C และการเรียกระบบโดยทั่วไปแล้วจะมีการบันทึกไว้ใน man pages M-x manเพื่อที่คุณจะสามารถใช้ บางสิ่งอาจได้รับการบันทึกไว้ที่ดีขึ้นในหน้าข้อมูล M-x infoใช้

สำหรับ Elisp C-h fตัวเองใช้ สำหรับงูใหญ่ใช้>>> help(<function, class, module>)ในล่าม

ฉันพบว่าภาษาอื่น ๆ ส่วนใหญ่มีเอกสารในรูปแบบ html เพื่อสิ่งนั้นลองใช้เบราว์เซอร์ในตัว (ฉันใช้ w3m) ตั้งค่าBROWSERตัวแปรสภาวะแวดล้อมของคุณเป็นสคริปต์ตัวตัดคำล้อมรอบemacsclient -e "(w3m-goto-url-new-session \"$@\")"(บน * ระวัง) ในกรณีที่บางสิ่งอาจเปิดเบราว์เซอร์และคุณต้องการให้เปิดภายใน emacs


2

ฉันรู้ว่านี่เป็นโพสต์เก่ามาก แต่คำถามนี้ใช้ได้สำหรับผู้เริ่มต้น emacs

IMO วิธีที่ดีที่สุดในการใช้ emacs เนื่องจาก IDE คือการใช้โปรโตคอลเซิร์ฟเวอร์ภาษากับ emacs คุณสามารถค้นหาข้อมูลทั้งหมดเกี่ยวกับเซิร์ฟเวอร์ภาษาในเว็บไซต์ที่เชื่อมโยง

สำหรับการติดตั้งอย่างรวดเร็วผมจะขอให้คุณไปที่หน้านี้eglot IMO eglot ทำงานได้ค่อนข้างดี มันทำงานร่วมกันได้ดีกับแพคเกจความสำเร็จอัตโนมัติเช่น บริษัท ให้การอ้างอิงการค้นหาและอีกมากมาย

นอกจากนี้สำหรับดีบักเกอร์คุณอาจต้องใช้เครื่องมือดีบั๊กสำหรับภาษาเฉพาะ คุณสามารถใช้ gdb จากภายใน emacs M-x gdbเพียงพิมพ์

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

นอกเหนือจากนั้นควรใช้คำสั่งการคอมไพล์ emacs เสมอ

สำหรับการควบคุมเวอร์ชันฉันยังไม่เห็นแพ็คเกจอื่นที่สามารถจับคู่พลังของเวทมนต์ได้ มันเฉพาะกับคอมไพล์ นอกจากนี้สำหรับ git ยังมีแพ็คเกจ git-timemachine อีกชุดซึ่งฉันพบว่ามีประโยชน์มาก

การค้นหาวัตถุและการค้นหาชั้นเรียนมีให้โดยโปรโตคอลเซิร์ฟเวอร์ภาษา

ต้นไม้โครงการสามารถใช้สำหรับ IDE เช่นอินเตอร์เฟซกับtreemacs

นอกจากนี้ยังมีปฏิสัมพันธ์โครงการห้องสมุดเรียกว่ากระสุน

สำหรับการทำให้สมบูรณ์โดยอัตโนมัติฉันพบว่าโหมด บริษัทมีประโยชน์มาก

emacs อย่างแท้จริงสามารถทำอะไรก็ได้


1

ในช่วงไม่กี่ปีที่ผ่านมาเสียงดังกราวกลายเป็นส่วนสำคัญของการสนับสนุน Emacs C ++ Atila Neves ได้พูดคุยกับ CppCon 2015: "Emacs เป็น C ++ IDE"

มันคือการพูดคุย 16 นาทีซึ่งเขาแสดงวิธีแก้ปัญหาสำหรับหัวข้อต่อไปนี้:

  • ข้ามไปที่คำจำกัดความ
  • อัตโนมัติเสร็จ
  • การเน้นไวยากรณ์แบบทันทีทันใด
  • ค้นหาไฟล์ในโครงการ

สไลด์สามารถพบได้ที่นี่


0

ในรูปแบบ Unix หรือ X windows ฉันไม่รู้ว่ามี IDE ในตัวที่เหมาะกับทุกสิ่ง

สำหรับการโต้ตอบกับ debuggers เพียงองค์ประกอบหนึ่งของ IDE พิจารณาrealgud สิ่งอื่น ๆ ที่ฉันพบว่ามีประโยชน์คือ parsers สำหรับข้อความตำแหน่งดังนั้นถ้าคุณมีการติดตามการโทรสแต็คและต้องการแก้ไขในสถานที่เฉพาะใน callstack อินเทอร์เฟซส่วนหน้านี้สามารถทำได้

จนถึงตอนนี้โปรแกรมนี้สามารถใช้การปรับปรุง แต่มันก็สามารถใช้คนที่ทำงานเพื่อปรับปรุงมันได้

คำเตือน: ฉันทำงานกับ realgud


0

ลองใช้โหมด lsp ตอนนี้คุณสามารถใช้ฟังก์ชั่น IDE อื่น ๆ ภายใน emacs ที่เชื่อมต่อกับเซิร์ฟเวอร์ ค้นหาข้อมูลเพิ่มเติม: โหมด lsp

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