emacs สามารถรองรับการประกาศฟังก์ชั่นในโครงการทั้งหมดได้หรือไม่?


12

emacs มีฟังก์ชั่นหรือไลบรารีที่สามารถอนุญาตให้ผู้ใช้ไปที่ฟังก์ชันการประกาศแม้ว่ามันจะถูกกำหนดไว้ในไฟล์อื่นหรือไม่?

ถ้าเป็นเช่นนั้นมีภาษาอะไรบ้างที่สนับสนุน?

แรงบันดาลใจสำหรับคำถามนี้มาจากบทความด้านล่างซึ่งพูดถึงเหตุผลบางประการที่ทำให้ emacs ไม่สามารถแข่งขันกับ IDE ได้

http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/


วิธีที่ emacs จัดการโดยทั่วไปคืออาศัยโปรแกรมภายนอกที่รวบรวม (เช่นเสียงดังกราว) เพื่อทำความเข้าใจซอร์สโค้ดอย่างรวดเร็วและตอบสนองต่อเคียวรีที่ส่งผ่านบรรทัดรับคำสั่ง ลองดูirony-clangที่ส่วนนี้ คุณอ่านความคิดเห็นในบทความหรือไม่
ฌอน Allred

1
ฟังก์ชั่นที่จัดทำโดย alchemist.el, สำหรับ elixir, หรือ omnisharp สำหรับ C #, ซึ่งทั้งคู่พึ่งพาโปรแกรมภายนอกสำหรับการนำทาง / การเปลี่ยนโครงสร้าง / IDE-ish นั้นค่อนข้างคล้ายกับ IDEs ส่วนใหญ่ในนั้น (อย่างน้อยสำหรับกรณีการใช้งานส่วนใหญ่) Emac ไม่ได้อยู่ในธุรกิจเดียวกับ IDEs ดังนั้นฉันไม่คิดว่ามันสมเหตุสมผลที่จะพูดว่ามันจะไม่มีโอกาสได้แข่งขัน
Renan Ranelli

@RananRanelli IDE เป็นวิธีเดียวกันยกเว้นเราจะต้องทำการรวมด้วยตนเองแทนที่จะเป็นคนที่ทำไปแล้วและเรียกมันว่า "IDE"
Tu Do

ในปี 2019 มีเพียงทางออกเดียวที่คุณควรพิจารณาในความคิดของฉัน และนั่นคือ rtags กับความสำเร็จของ บริษัท ลืม etags หรือ CEDET ที่ป่องและไม่เสถียร rtags ใช้ข้อมูลเวลาคอมไพล์เพื่อให้โครงสร้างสดของสิ่งที่โครงการของคุณใช้ global et al นั้นแย่มาก - พวกเขาได้รับเกียรติ "greps" ที่มีการคาดเดามากมายและมักจะพาคุณไปยังสถานที่ที่ไม่ถูกต้อง github.com/Andersbakken/rtags
RichieHH

คำตอบ:


14

คุณสามารถข้ามไปยังคำจำกัดความ / การอ้างอิงของโครงการทั้งหมดที่มีขนาดใหญ่เท่ากับทรีเคอร์เนล Linux (มากกว่า 36k) ในทันที ดูคู่มือ C / C ++ ของฉันสำหรับรายละเอียด สำหรับ C / C ++ ฉันแนะนำให้ใช้GNU Globalที่รองรับ C, C ++, Yacc, Java, PHP4 และชุดประกอบ

กุญแจสำคัญคือถ้าคุณต้องการมีคุณสมบัติ IDE ของภาษาคุณจะต้องติดตั้งปลั๊กอินของภาษานั้น ต่อไปนี้เป็นแพ็คเกจสำหรับภาษาแบบไดนามิกที่ฉันรู้จัก:

  • การพัฒนาเว็บสด: เสียบโหมด
  • javascript: นกนางนวล แต่ก่อนที่จำได้ในการติดตั้งjs2 โหมด เป็นสิ่งที่js2-modeไม่เห็นคำอธิบาย ; แต่โดยjs2-modeพื้นฐานแล้วเป็นตัวแยกวิเคราะห์ Javascript ที่สมบูรณ์ที่สร้าง AST เพื่อทำคุณสมบัติ IDE ที่เหมาะสม หากคุณติดตั้งskewer-modeมากกว่าที่คุณจะมีjs2-modeค่าเริ่มต้นตั้งแต่skewer-modeขึ้นอยู่กับมัน
  • Python: elpyดูคุณสมบัติ IDE
  • Ruby: robeให้คุณสมบัติเหล่านี้:
  • ข้ามไปที่การกำหนดวิธีการ
  • ข้ามไปที่ซุปเปอร์หรือคอนสตรัคที่เรียกว่าที่จุด
  • ข้ามไปที่โมดูลหรือคลาส (หากมีอย่างน้อยหนึ่งวิธีที่กำหนดไว้)
  • แสดงเอกสารวิธีการ
  • แสดงข้อมูลเกี่ยวกับวิธีการที่เรียกว่าจุดโดยใช้ ElDoc
  • วิธีการและชื่อที่สมบูรณ์คงที่

คุณสามารถใช้ctagsเพื่อรองรับภาษามากมายเช่น shell script หรือ Tcl ...


มีคำแนะนำชุดสำหรับ javascript หรือไม่
2522280

@BarryG มีTernและj2-modeฉันแก้ไขในคำตอบของฉัน
Tu Do

2
ฉันต้องการจะชี้ให้เราเห็นว่าanacondaอาจเป็นทางออกที่เฉพาะเจาะจงมากขึ้นสำหรับการกระโดดคำจำกัดความใน Python
PythonNut

@TuDo คุณได้ใส่รายการคุณสมบัติของ Robe ไว้ใน ESS
Dmitry

สำหรับ C ++ มีrtagsและycmdด้วย ฉันใช้ ycmd ซึ่งใช้ได้กับเช่น Python, C #, Go และภาษาอื่น ๆ ฉันใช้dumb-jumpและconsulting-rgเป็นแบบถอยกลับหรือเพื่อแสดงประเพณีหรือแสดงความคิดเห็น / กล่าวถึงเอกสารของสัญลักษณ์
unhammer

20

ฉันวิ่งเข้าไปในปัญหาที่คล้ายกันกับ emacs ดังนั้นฉันทำใบ้กระโดด ฉันลองวิธีแก้ไขปัญหาต่าง ๆ ที่กล่าวถึงในคำตอบที่ยอมรับ แต่ฉันพบปัญหาต่อไปนี้อย่างน้อยหนึ่งข้อเสมอ:

  • โซลูชันใช้งานได้กับภาษาการเขียนโปรแกรมเดียวเท่านั้น
  • โซลูชันต้องใช้ไฟล์ดัชนี (TAG) หรือกระบวนการถาวร

ฉันต้องการโซลูชันที่ "เพิ่งทำงาน" และไม่ต้องการการปรับแต่งหรือตั้งค่า นั่นคือฉันต้องการโคลนซ้ำ repo บน Github และนำทางไปรอบ ๆ เหมือนโครงการอื่น ๆ ของฉันเอง

ตอนนี้Dumb Jumpได้รับการสนับสนุนเบื้องต้นสำหรับ:

  • JavaScript
  • Emacs Lisp
  • หลาม
  • ไป
  • PHP
  • ทับทิม
  • เฟาสต์
  • R
  • Lua
  • สนิม
  • ...และอื่น ๆ

มันสามารถใช้ได้ผ่านปัญหา MELPAและ GitHub และ PRs เป็นมากกว่าการต้อนรับ


4

โซลูชันหลักสำหรับสิ่งนี้ใน emacs กำลังใช้ไฟล์ TAGS ซึ่งสร้างขึ้นโดยโปรแกรมเช่น etags หรือ gtags ฉันเองใช้ (และแนะนำ) ctags ที่มีชีวิตชีวาและ etags-select.el เพื่อช่วยคุณ จำกัด ขอบเขตจุดหมายปลายทางเมื่อสัญลักษณ์การค้นหาอยู่ในหลาย ๆ ปลายทาง ภาษาที่รองรับมีจำนวนมากดูคู่มือเครื่องมือแต่ละอัน มีแม้กระทั่งการสนับสนุนสำหรับการเพิ่มภาษาของคุณเองโดยที่คุณสามารถให้การแสดงออกปกติที่แนะนำ ctags วิธีการแยกแท็กที่คุณสนใจ


1
Oh! ฉันจะลืมแท็กไฟล์ได้อย่างไร ctags -e -R *จากไดเรกทอรีรากจะตั้งค่าให้คุณ
ฌอน Allred

นี่เป็นวิธีแก้ปัญหาที่ยอมรับได้หรือไม่เมื่อโครงการของคุณมีการขึ้นต่อกันจำนวนมาก (เช่นโปรเจ็กต์เว็บ dev ล่าสุดของ javascript)
Rudolf Olah

จำนวนการขึ้นต่อกันไม่ได้เป็นอุปสรรค คุณสามารถมีไฟล์แท็กขนาดใหญ่หนึ่งไฟล์ที่รวมไลบรารีต่าง ๆ มากมาย ฉันทำสิ่งนี้มาหลายปีแล้วการเรียกใช้คำสั่ง ctags ทำสิ่งนี้เล็กน้อย หรือสิ่งที่ฉันแนะนำตอนนี้คือการมีไฟล์แท็กแยกต่างหากต่อการอ้างอิง emacs ฉลาดพอที่จะโหลดไฟล์หลายแท็ก เพื่อความสะดวกในการค้นหา etags-table.el ซึ่งช่วยในการโหลดกลุ่มของไฟล์แท็กต่อโครงการ
InHarmsWay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.