การใช้ Emacs เป็น C / C ++ IDE ที่มีคุณสมบัติครบถ้วน


50

ฉันลองและใช้งานมานานกว่าหนึ่งปีเพื่อใช้ Emacs เป็น C / C ++ IDE ฉันประสบความสำเร็จเพียงเล็กน้อยเพียงเล็กน้อยเท่านั้น แต่ได้พบกับกำแพงอิฐสองสามแห่งระหว่างทาง ขณะนี้ฉันกำลังพยายามใช้ CEDET แต่ฉันมีเวลาค่อนข้างเข้าใจวิธีการใช้อย่างมีประสิทธิภาพ

คุณสมบัติที่ฉันกำลังมองหาใน IDE มีดังนี้:

  1. การจัดการซอฟต์แวร์ "โครงการ" ฉันต้องการให้ IDE มีความรู้สึกของไฟล์ทั้งหมดที่ทำขึ้นในโครงการปัจจุบันของฉันเพื่อให้ฉันสามารถทำหน้าที่เช่นการค้นหาและแทนที่ภายในโครงการของฉัน (มันจะดีถ้าฉันสามารถทำได้โดยไม่ทำให้ต้นไม้ต้นกำเนิดของฉันมีไฟล์สนับสนุนมากมายทำไมฉันต้องมีไฟล์โครงการรวมศูนย์มากกว่าหนึ่งต่อโครงการ?)
  2. ความสามารถในการสร้างโครงการปัจจุบันจากภายใน IDE โดยไม่คำนึงถึงบัฟเฟอร์ที่ฉันกำลังเยี่ยมชม ฉันต้องสามารถผูกคีย์ที่จะสร้างโครงการปัจจุบัน
  3. การรายงานข้อผิดพลาด ฉันไม่ต้องการอ่านผลลัพธ์มากกว่า 500 บรรทัดเพื่อหาข้อผิดพลาดที่เครื่องมือสร้างรายงาน ข้อผิดพลาดจะแสดงในบัฟเฟอร์ของตัวเองโดยมีหนึ่งบรรทัดต่อข้อผิดพลาด
  4. การรับรู้สัญลักษณ์ภายในโครงการและที่ที่มีการกำหนดไว้ ฉันต้องการข้ามไปยังคำจำกัดความของสัญลักษณ์ว่าอยู่ในไฟล์โครงการของฉันหรือในระบบมีไฟล์อยู่ด้วย
  5. การแก้ไขข้อบกพร่องทางสายตา ฉันต้องการมีรายการเฝ้าดูของตัวแปรเฉพาะที่อัปเดตโดยอัตโนมัติเมื่อฉันดูรหัส ฉันต้องการที่จะสามารถตั้งค่าเบรกพอยต์ในรหัสดูบรรทัดของรหัสที่จะดำเนินการต่อไป

ฉันรู้ว่าคุณสมบัติเหล่านี้มีอยู่เพราะฉันเคยทำงานในแต่ละครั้งหรือใช้ EDE, Semantic, GDB เป็นต้นปัญหาคือฉันไม่เคยมีคุณสมบัติเหล่านี้ทั้งหมดในเวลาเดียวกัน เพราะโดยปกติแล้วแต่ละชิ้นจะต้องมีการกำหนดค่าด้วยตัวเองและโดยปกติแล้วมันจะทำงานมากเกินกว่าจะหาวิธีกำหนดค่าทั้งหมดในครั้งเดียวและทำให้มันทำงานร่วมกันได้

มีโซลูชั่นอะไรบ้างสำหรับการเปลี่ยน Emacs ให้เป็น C / C ++ IDE ที่มีคุณสมบัติครบถ้วน คุณต้องกำหนดค่าทุกอย่างทีละน้อยหรือมีวิธีตั้งค่าคุณสมบัติทั้งหมดในแต่ละครั้งหรือไม่?

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


6
คำถามนี้อาจจะดีกว่าแบ่งออกเป็นหลาย คุณอาจพบว่ามีคำตอบบางส่วนที่ไม่ได้รับความสนใจ
Malabarba

2
นอกจากนี้ไอเท็ม 1 อาจซ้ำกันของemacs.stackexchange.com/questions/448/…
Malabarba

6
@Malabarba: ถ้าฉันถามคำถามห้าคำถามแยกกันมันอาจจะซ้ำกัน ประเด็นทั้งหมดของคำถามนี้คืออาจมีห้าแพ็คเกจที่แตกต่างกันซึ่งบรรลุห้าเป้าหมายที่แตกต่างกัน แต่การกำหนดค่าทั้งห้าให้เล่นอย่างสวยงามดูเหมือนว่าจะเป็นไปไม่ได้ หากคำตอบกลับมาในฐานะ "Emacs ไม่สามารถทำงานเป็น IDE ที่มีคุณสมบัติครบถ้วนเนื่องจากต้องใช้เวลาในการกำหนดค่าที่เป็นไปไม่ได้" ถ้างั้นก็ไม่เป็นไร
nispio

4
แต่ละจุดอาจเป็นคำถามของตัวเอง (อาจซ้ำกัน) ทำให้พวกเขาทั้งหมดเข้าด้วยกันในคำถามเดียวบางครั้งสามารถนำไปสู่คำตอบที่แตกต่างกันเนื่องจากการโต้ตอบแพคเกจ
Jonathan Leech-Pepin

ที่เกี่ยวข้อง: emacs.stackexchange.com/q/3359/2264
Sean Allred

คำตอบ:


27

มีระดับ "IDE-Ness" ที่แตกต่างกันสำหรับภาษาต่าง ๆ และน่าเสียดายที่คุณจะไม่ได้รับคุณสมบัติ IDE แบบเต็มโดยไม่มีการกำหนดค่าบางอย่าง (ถ้าคุณไม่ชอบการกำหนดค่าสิ่งต่าง ๆ คุณอาจไม่ควรใช้ Emacs) CEDET ตั้งเป้าหมายที่จะเป็นโซลูชั่นที่สมบูรณ์ที่ครอบคลุมทุกความต้องการของคุณสำหรับภาษาที่รองรับ แต่ฉันเองก็ไม่เคยทำงานได้อย่างถูกต้อง ฉันใช้แพ็คเกจสองสามชุดเพื่อครอบคลุมฐาน IDE ของฉันแทน ฉันจะพูดถึงคะแนนของคุณตามลำดับด้วยวิธีแก้ปัญหาสำหรับภาษาต่าง ๆ ที่ฉันรู้จัก:

  1. projectileเป็นแพคเกจที่ใกล้เคียงที่สุดเพื่อมอบประสบการณ์แบบ IDE ที่เหมือนจริง มีฟังก์ชันการทำงานที่มีประโยชน์มากมายสำหรับแต่ละโครงการ คุณอาจต้องการการจัดการหน้าต่าง / พื้นที่ทำงานบางประเภทเช่นกัน ผมใช้วิธีการแก้ปัญหาของตัวเองที่เรียกว่าwacspaceแต่การแก้ปัญหาที่ดีอื่น ๆ รวมถึงมุมมอง , เวิร์กกรุ๊ปและelscreen
  2. ภาษาที่ต่างกันมีแนวคิดที่แตกต่างกันในสิ่งที่ "build" คือ แต่M-x compileสามารถรองรับอะไรได้มากและทำให้การเพจโดยใช้ข้อผิดพลาดง่าย (แค่ใช้next-error) คุณสามารถปรับแต่งบนพื้นฐานต่อโครงการโดยใช้ตัวแปรไดเรกทอรีcompile-commandที่จะตั้ง คุณสามารถเรียกใช้compileด้วย projectile โดยใช้projectile-compile-project( C-c p c)
  3. M-x compileนอกจากนี้ยังมีคุณครอบคลุมนี่ - ข้อผิดพลาดที่มักจะจบลงต่อหนึ่งบรรทัดในบัฟเฟอร์กับเพจง่ายด้วย*compilation*next-error
  4. การข้ามไปที่สัญลักษณ์เกี่ยวข้องกับ "การเข้าใจโค้ดของคุณ" และนี่คือจุดที่การสนับสนุนแตกต่างกันอย่างมากในภาษาต่างๆ สำหรับ Elisp คุณสามารถใช้elisp-slime-nav ที่ยอดเยี่ยมแล้วM-.เพื่อข้ามไปยังคำจำกัดความ ต่อไปนี้เป็นแพคเกจบางตัวที่ให้การสนับสนุนคล้ายกับภาษาอื่น: CIDER (สำหรับ Clojure); SLIME (สำหรับ Common LISP); จีวร (สำหรับ Ruby); semanticหรือclang-tagsสำหรับ C / C ++ (ข้อจำกัดความรับผิดชอบ: ฉันไม่เคยใช้อย่างใดอย่างหนึ่งดังนั้นฉันจึงไม่ทราบว่ามันทำงานได้ดีหรือไม่) หากสิ่งอื่นล้มเหลวคุณยังสามารถใช้สิ่งอำนวยความสะดวก TAGS ในตัวของ Emacs โดยใช้สิ่งต่างๆเช่นctags ที่เต็มไปด้วยชีวิตชีวาแต่ฉันไม่เคยเห็นผลลัพธ์ที่ใกล้เคียงกับ TAGS ที่ยอมรับได้เลย
  5. Emacs ได้รับการสนับสนุนอย่างดีสำหรับนักแก้จุดบกพร่อง GDB กับGUDเป็นทางออกที่ดีที่สุดของคุณสำหรับภาษา C-like; ไม่อย่างนั้นมันค่อนข้างจะสมบูรณ์ในแต่ละภาษา (ฉันไม่คิดว่าการดีบักแบบภาพข้ามภาษาเป็นเป้าหมายที่แท้จริงจริงๆ)

4
ในฐานะที่เป็นโหนดด้านข้างprojectileสามารถบูรณาการโดยตรงกับperspectiveการสร้างperspective-per-projectสวิตช์อัตโนมัติในโครงการ
Jonathan Leech-Pepin

ฉันจะเพิ่มหมายเหตุเกี่ยวกับsemantic# 4 ความหมายเป็นแพ็คเกจที่ยอดเยี่ยมมันเข้าใจโค้ดของคุณและสามารถทำสิ่งที่มีประโยชน์มากมายกับข้อมูลนั้น
Jordon Biondo

ฉันไม่เคยใช้จริง ๆsemanticและฉันคิดว่าฉันจำได้ว่ามันมีการสนับสนุน C ++ ที่ไม่สมบูรณ์ แต่ฉันได้เพิ่มไปยังคำตอบ
shosti

15

ฉันใช้คำแนะนำนี้เพื่อเริ่มต้นใช้ Emacs เป็น C ++ IDE มันแนะนำHelmและProjectileที่ช่วยตอบคำถามของคุณ เพื่อปัญญา

  1. Projectile จัดการโครงการ มันค้นหาแผนผังไดเรกทอรีสำหรับ Makefile, SConstruct, Git repo, SVN repo และบางทีไฟล์ build หรือระบบควบคุมเวอร์ชันอื่น ๆ เพื่อเรียนรู้ว่าไฟล์ใดที่เชื่อมโยงกับโครงการปัจจุบันโดยอัตโนมัติ ตัวอย่างเช่นC-c p hเรียกใช้helm-projectileซึ่งใช้ Helm เพื่อค้นหาไฟล์ในโครงการปัจจุบัน

  2. กระสุนปืนสามารถสร้างโครงการของคุณ C-c p cรันprojectile-compile-projectซึ่งพยายามเรียกใช้ Make / SCons / CMake ตามไฟล์ที่มีอยู่ ฉันไม่เคยมีการกำหนดค่านี้ มันรู้อยู่เสมอว่าจะทำอย่างไร

  3. ข้อผิดพลาดปรากฏขึ้นในบัฟเฟอร์ของตัวเองเมื่อคุณเรียกใช้projectile-compile-projectแต่ฉันไม่แน่ใจว่ามันสวยเท่าที่คุณต้องการ

  4. คุณสามารถใช้แพ็คเกจhelm-gtagsที่เชื่อมต่อกับgtagsโปรแกรม (ซึ่งคุณควรมีอยู่ในระบบของคุณ) โปรดทราบว่า gtags เป็นโครงการ GNU ดังนั้นจึงไม่น่าจะทำงานได้ทันทีบน Windows

    เมื่อกำหนดค่าแล้ว Helm จะรับรู้ถึงสัญลักษณ์ในโครงการและสามารถนำทางไปยังคำจำกัดความและการใช้สถานที่ ตัวอย่างเช่นhelm-gtags-dwimสามารถข้ามไปใช้ตัวแปรหรือฟังก์ชั่นใด ๆ และเมื่อทำงานกับไฟล์ส่วนหัวจะเปิดไฟล์ส่วนหัวนั้น

  5. ฉันยังไม่ได้ลอง

คำแนะนำในรายการให้ข้อมูลการกำหนดค่าที่ชัดเจนเกี่ยวกับวิธีเริ่มต้นใช้งาน


ฉันสะดุดกับคำแนะนำนั้นเช่นกันและนำไปใช้ IMHO มันมีน้ำหนักมากและเปลี่ยนแปลงการโต้ตอบพื้นฐานของ emacs มากเกินไป ฉันได้ปิดใช้งานการกำหนดค่าที่เกี่ยวข้องกับ helm หลายอย่างเนื่องจากพวกมันรบกวนทางลัดปกติ (เช่นเปิดไดเรกทอรีปัจจุบันในบัฟเฟอร์ได้ง่ายหรือเปิดไฟล์ใน sub sub dir ด้วยการกดปุ่มไม่กี่ครั้ง) แม้ว่าจะมีค่าควร แต่ควรลองเป็นขั้นเป็นตอน
Stéphane Gourichon

9

เนื่องจากคุณกำลังขอ C / C ++ IDE ที่มีคุณสมบัติครบถ้วนตอนนี้ฉันอาจมีคุณสมบัติ

ฉันใช้ MS IDE ทั้งหมดจาก vc4 เป็น Visual Studio 2010 ดังนั้นฉันจึงเข้าใจในสิ่งที่คุณต้องการอย่างเต็มที่

ข่าวดีก็คือว่า Emac สามารถทำได้ดีถึง 95% เช่นเดียวกับ Visual Studio และสามารถทำได้มากกว่านี้ แต่คุณอาจไม่สนใจส่วน "เพิ่มเติม" ดังนั้นฉันจะมุ่งเน้นไปที่คำถามของคุณเท่านั้น

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

คำตอบสำหรับคำถามที่ 1 : คุณไม่จำเป็นต้องติดตั้งอะไรให้ติดตั้ง cpputils-cmake ( https://github.com/redguardtoo/cpputils-cmake ) ซึ่งติดตั้งปลั๊กอินอื่น ๆ สะดวกยิ่งขึ้นกว่า Visual Studio ดังนั้นไม่จำเป็นต้องทำการตั้งค่าสำหรับแต่ละโครงการ สำหรับการค้นหาสิ่งทดแทนฉันรวมพลังของ bash / perl / git และ percol ( https://github.com/mooz/percol ) ซึ่งดีกว่า IDE ใด ๆ ตรวจสอบบล็อกของฉัน ( http://blog.binchen.org/categories/emacs.html ) และ ~ / .bashrc ของฉัน ( https://gist.github.com/redguardtoo/01868d7a13817c9845e8#file-bashrc ) ตัวอย่างเช่นฉันสามารถค้นหาแทนที่ไฟล์ในการกระทำบางอย่าง

คำตอบสำหรับคำถามที่ 2 : มันได้รับการตั้งค่าโดย cpputils-cmake คุณเพียงแค่ต้องการM-x compileตามปกติ

ตอบคำถาม 3 : เหมือนกับคำถาม 2 ฉันไม่รู้ว่าทำไมถึงเป็นปัญหา มันเป็นพฤติกรรมเดียวกันกับ VS โดยมีการโยงคีย์ที่ดีกว่า

คำตอบสำหรับคำถามที่ 4 : ตอนนี้คนส่วนใหญ่ใช้ Gnu Global ซึ่งสามารถใช้ร่วมกับ cpputils-cmake ผมเข้าใจปัญหาที่แท้จริงคือการตรวจสอบไดเรกทอรีที่มีทั้งหมดรวมอยู่หัว C ++ โดยอัตโนมัติ ที่สามารถทำได้ด้วย cpputils-cmake ทุกอย่างเป็นเรื่องง่าย โปรดman globalในเชลล์และอ่านคู่มือเกี่ยวกับตัวแปรสภาพแวดล้อม GTAGSLIBPATH มีปลั๊กอินมากมายที่จะมอบ UX ที่ดีโดยใช้ Global สำหรับการนำทางโค้ดฉันแนะนำ ggtags.el

คำตอบสำหรับคำถามที่ 5 : การแก้ไขข้อบกพร่องทางภาพหลายคนแนะนำM-x gdb-many-windowฉันลองแล้ว แต่มันใช้งานไม่ได้ เป็นเพียงเพราะรุ่น gdb ของฉันล้าสมัย (คำแนะนำฉันใช้ OSX 10.7.3) และฉันขี้เกียจเกินกว่าที่จะอัปเกรดระบบปฏิบัติการของฉัน แต่ GUD ก็ใช้ได้ ฉันสร้างปุ่มลัดเพื่อพิมพ์ตัวแปรให้ฉันในหน้าต่างแก้ไข ทุกสิ่งที่ดีบั๊กใช้งานได้ ไม่มีเค้าโครงตาราง UX เป็น VS แต่จะซื่อสัตย์กับคุณ ดีบักเกอร์ของ Microsoft UX นั้นไม่ดีที่สุดในโลกเช่นกัน เครื่องมือดีบั๊กที่ดีที่สุดสำหรับผู้ใช้คือ DDD ( http://www.gnu.org/software/ddd/) Gud และ VS ต่างก็ดูดปัญหานี้ไป วันนี้ฉันเพิ่งแทรกรหัสบันทึกด้วย yasnippet ซึ่งเป็นปลั๊กอินของ Emacs อีกตัว เพื่อชี้แจงฉันรู้เทคนิคขั้นสูงทั้งหมดเกี่ยวกับจุดพักเพียงเพราะฉันขี้เกียจเกินไปที่จะใช้เทคนิคเหล่านี้ การใส่รหัสบันทึกใน Emacs นั้นง่ายกว่ามาก

มีอีกหลายสิ่งเกี่ยวกับ IDE: การทำให้โค้ดเสร็จสมบูรณ์? ใช้โหมด บริษัท ไม่จำเป็นต้องตั้งค่า ตรวจสอบไวยากรณ์เวลาจริง ใช้ cpputils-cmake แล้ว(flymake-mode 1)

สิ่งที่ดีที่สุดคือคุณต้องทำการติดตั้งน้อยกว่า VS ถ้าคุณใช้การตั้งค่าของฉันที่ ( https://github.com/redguardtoo/emacs.d ) การติดตั้งที่มีชื่อเรื่อง"การกำหนดค่า emacs เพอร์เซลล์บวก C / C ++ การสนับสนุน"

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

วิธีที่ง่ายคือเพียงแค่คัดลอกการตั้งค่าของฉัน (หรือการตั้งค่าของใครก็ได้บน github นับดาวในตอนแรก) ภายใน 5 นาทีคุณจะมี C ++ IDE ที่ทำงานได้อย่างสมบูรณ์ VS ยังไม่เสร็จสิ้นการเริ่มต้นภายใน 5 นาที

วิธีที่ยากคือการปรับแต่งการตั้งค่าจากศูนย์ หากคุณเลือกวิธีที่ยากแล้วไม่บ่น Emacs มันเป็นทางเลือกของคุณ

BTW ในระยะยาวความรู้เล็กน้อยของ Emacs Lisp อาจเป็นประโยชน์ ฉันคิดว่ามันเป็นเรื่องเล็กน้อยสำหรับนักพัฒนามืออาชีพ C ++ เปรียบเทียบเวลาที่ฉันเสียเวลากับ MS sh * t หลายปีที่ผ่านมา MS อัปเกรดรันไทม์ VC ในบางหน้าต่างอย่างเงียบ ๆ มันทำให้สินค้าของฉันทำงาน OK บนเครื่องของ บริษัท แต่ล้มเหลวในคอมพิวเตอร์ของลูกค้า

หลังจากเหตุการณ์นั้นฉันเริ่มเข้าใจ Richard Stallman


1
น่าสนใจ "คุณต้องใช้ CMake" -> ดังนั้นคุณกำลังบอกว่าเมื่อทำงานกับแพคเกจซอฟต์แวร์แบบสุ่มฟรีที่ใช้ autoconf หรือสคริปต์ส่วนบุคคลคุณควรเขียน wrapper CMakeLists.txtหรือไม่
Stéphane Gourichon

1
คุณสามารถใช้ GNU Global แทนไม่เหมาะกับโซลูชัน cmake แต่มีความยืดหยุ่นมากขึ้นดูblog.binchen.org/posts/emacs-as-c-ide-easy-way.html
chen bin

5

สำหรับ # 4 ฉันขอแนะนำ exuberant-ctags และการสนับสนุนแท็กในตัวซึ่งฉันใช้มาหลายปี อีกทางหนึ่งฉันเพิ่งเปลี่ยนมาใช้ GNU Global และแพ็คเกจ ggtags และพบว่ามันเหนือกว่าเล็กน้อย แม้ว่ามันจะทำงานเกือบเหมือนกัน ทั้งสองทำงานโดยไม่มีการกำหนดค่า สำหรับฟีเจอร์ IDE อื่น ๆ ฉันก็ชอบแพ็คเกจอัตโนมัติที่สมบูรณ์ด้วย ฉันใช้M-x compileอย่างกว้างขวางและผูกกุญแจโลกกับข้อผิดพลาดถัดไปและก่อนหน้า สำหรับการค้นหาใน "โครงการ" M-x find-grepฉันมักใช้เพียง โปรดทราบว่ามันจะใช้การเชื่อมโยงคีย์เดียวกันสำหรับข้อผิดพลาดถัดไปและก่อนหน้า


4

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

Projectileดูเหมือนตัวเลือกที่ดีที่สุดสำหรับการจัดการโครงการใน emacs มันมีน้ำหนักเบามากคุณไม่จำเป็นต้องเพิ่มไฟล์ใด ๆ ลงในโครงการของคุณ มันจะพยายามตรวจหาโครงการให้คุณโดยอัตโนมัติโดยพิจารณาจากไฟล์พิเศษบางไฟล์ ตัวอย่างเช่น - ถ้าคุณกำลังทำงานใน repo git โปรเจคไทล์จะถือว่าเป็นโปรเจ็กต์ (ไฟล์ใด ๆ ที่ถูกติดตามโดย git จะถือว่าเป็นส่วนหนึ่งของโปรเจ็กต์) จากนั้นคุณจะสามารถใช้คำสั่งเช่นprojectile-find-fileเปิดไฟล์ใด ๆ มันมีพวงของคำสั่งอื่น ๆ ซึ่งทำงานบนพื้นฐานของโครงการต่อ

การรายงานข้อผิดพลาด ฉันไม่ต้องการอ่านผลลัพธ์มากกว่า 500 บรรทัดเพื่อหาข้อผิดพลาดที่เครื่องมือสร้างรายงาน ข้อผิดพลาดจะแสดงในบัฟเฟอร์ของตัวเองโดยมีหนึ่งบรรทัดต่อข้อผิดพลาด

Flycheckมีการสนับสนุนสำหรับการตรวจสอบไวยากรณ์โดยใช้ clang / gcc

การรับรู้สัญลักษณ์ภายในโครงการและที่ที่มีการกำหนดไว้ ฉันต้องการข้ามไปยังคำจำกัดความของสัญลักษณ์ว่าอยู่ในไฟล์โครงการของฉันหรือในระบบมีไฟล์อยู่ด้วย

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


2

รุ่น CEDET ที่ส่งมาพร้อมกับ Emacs นั้นติดตั้งยาก แต่อันที่คุณสามารถเข้าไปที่เว็บไซต์ทางการนั้นง่ายต่อการติดตั้งและสามารถตอบสนองความต้องการ # 2 และ # 4 ของคุณได้

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

Semantic ของ CEDET มีตัวแยกวิเคราะห์สำหรับหลายภาษารวมถึง C ++ มันสามารถเรียกแท็กที่กำหนดในไฟล์เช่น exuberant-ctags และ GNU Global แต่ก็มีคุณสมบัติการเติมข้อมูลอัตโนมัติและการกระโดดที่แม่นยำ หากคุณมีสองวิธีที่เรียกว่า "foo" การกระโดดของ Semantic นั้นฉลาดพอที่จะนำคุณไปสู่วิธีที่ถูกต้อง

สำหรับ # 1 ฉันใช้projectileเองและฉันใช้GDBสำเร็จ# 5 เมื่อหลายปีก่อน

คำแนะนำสำหรับ # 3: หาก EDE มากเกินไปสำหรับคุณ Emacs มีคำสั่งM-x recompileให้เรียกใช้คำสั่งการคอมไพล์ครั้งล่าสุดของคุณเพื่อให้คุณสามารถรันการคอมไพล์ครั้งแรกจากนั้นใช้recompileในบัฟเฟอร์ใด ๆ


1

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


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

3
ลองใช้github.com/abingham/emacs-ycmdแทนไคลเอ็นต์ emacs (โปรดทราบว่าใช้github.com/Valloric/ycmdไม่ใช่github.com/Valloric/YouCompleteMe ) มันทำงานร่วมกับโหมด บริษัท (แนะนำโดยคำตอบอื่น ๆ ที่นี่) ดังนั้นมันจึงทำงานได้ดีกับส่วนที่เหลือของ Emacs คุณสามารถติดตั้ง ycmd และ company-ycmd จาก MELPA ( sprunge.us/LXGYคือ config ของฉัน); และทำตามคำแนะนำในการสร้างสำหรับ ycmd ความท้าทายเพียงอย่างเดียวคือคุณต้องใส่ค่าสถานะการคอมไพล์ของคุณลงในไฟล์เช่นgithub.com/Valloric/ycmd/blob/master/examples/…
unhammer

1

ฉันมีความสุขกับ CEDET จาก repo แหล่งที่มา + ECB + gtags + cscope ที่กล่าวว่ามีคำแนะนำมากมายในโพสต์นี้ที่ฉันจะพยายาม


1
คุณช่วยอธิบายสิ่งที่คุณต้องทำเพื่อให้เครื่องมือทั้งหมดเหล่านี้ทำงานร่วมกันได้หรือไม่?
nispio

4
ตอนนี้ดูเหมือนว่าจะเป็นความคิดเห็นที่ถูกใส่ผิดที่ :-) ถ้าคุณจะทำอะไรกรุณาอธิบายเพิ่มเติมหน่อย
Malabarba

ขออภัยเกี่ยวกับการกระชับ แอป StackExchange ใช้โดมในการทำความคุ้นเคย โซลูชันนี้ตอบ # 4 จัดการกับการนำทางสัญลักษณ์และการวิเคราะห์แหล่งที่มา CEDET แน่นอนมีความหมาย ECB เป็นเบราว์เซอร์รหัส Emacs และใช้ CEDET เพื่อแสดงรายการวิธีการและข้อมูลสัญลักษณ์รายงาน Gtags และ Cscope ทั้งสร้างตารางของข้อมูลสัญลักษณ์จากฐานที่มา (หมวกยังทำเช่นนี้) และทำงานร่วมกับ Emacs เพื่อให้การนำทางด้วยแท็กหรือสัญลักษณ์
Clay Haapala

1

ดังที่ได้กล่าวไว้ในส่วนข้างต้น projectile (เป็นทางเลือกกับหางเสือ) เป็นโซลูชั่นที่ยอดเยี่ยมสำหรับการจัดการโครงการ

Ycmd เหมาะสำหรับการเติมโค้ดและการนำทางบางส่วนและไคลเอนต์ที่ดีที่สุดสำหรับมันคือemacs-ycmd (การเปิดเผยอย่างเต็มรูปแบบ: ฉันเขียนไคลเอนต์ emacs)

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

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