क्या Emacs किसी संपूर्ण प्रोजेक्ट में फ़ंक्शन की घोषणा के लिए जा सकते हैं?


12

क्या emacs में एक फ़ंक्शन या लाइब्रेरी है जो उपयोगकर्ता को फ़ंक्शन घोषणा में जाने की अनुमति दे सकती है, भले ही वह किसी अन्य फ़ाइल में परिभाषित की गई हो?

यदि हां, तो किन भाषाओं का समर्थन है?

इस सवाल की प्रेरणा, नीचे दिए गए लेख से मिलती है, जो कुछ कारणों के बारे में बात करता है कि एमएसीएस आईडीई के साथ प्रतिस्पर्धा करने में कभी सक्षम नहीं होगा।

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


जिस तरह से एमएसीएस आम तौर पर इसे संभालता है वह स्रोत कोड को जल्दी से समझने और कमांड लाइन के माध्यम से पारित प्रश्नों का जवाब देने के लिए बाहरी, संकलित कार्यक्रमों (जैसे क्लैंग) पर निर्भर करता है। की जाँच करें irony-clangयह अंत करने के लिए। क्या आपने लेख पर टिप्पणी पढ़ी?
सीन एलेड

1
Alchemist.el द्वारा उपलब्ध कराई गई कार्यक्षमता, अमृत के लिए, या C # के लिए सर्वनाश के लिए, दोनों ही नेविगेशन / रीफ़ैक्टरिंग / ide-ish सामान के लिए बाहरी कार्यक्रमों पर निर्भर हैं जो कि अधिकांश IDEs के समान हैं। (कम से कम अधिकांश उपयोग के मामलों के लिए)। Emacs IDEs के समान व्यवसाय में नहीं है, इसलिए मुझे नहीं लगता कि यह कहना उचित होगा कि इसके लिए प्रतिस्पर्धा का मौका कभी नहीं होगा ।
रेनन रानेली

@RananRanelli IDE केवल एक ही तरीका है, सिवाय इसके कि हमें मैन्युअल रूप से एकीकरण करना है बजाय किसी ने पहले से ही किया और इसे "IDE" कहा।
तू क्या

2019 में केवल एक ही उपाय है जिसे आपको मेरी राय में विचार करना चाहिए। और वह कंपनी पूरा होने के साथ rtags है। Etags या फूला हुआ, अस्थिर CEDET भूल जाओ। rtags आपके प्रोजेक्ट का उपयोग कर रहे हैं की एक LIVE संरचना प्रदान करने के लिए संकलन-समय की जानकारी का उपयोग करता है। वैश्विक एट अल भयानक हैं - वे "ग्रेप्स" महिमा करते हैं जो बहुत अधिक अनुमान लगाते हैं और अक्सर आपको गलत जगह पर ले जाते हैं। github.com/Andersbakken/rtags
रिचीएच

जवाबों:


14

आप पूरे प्रोजेक्ट के किसी भी परिभाषा / संदर्भ में एक पल में लिनक्स कर्नेल स्रोत ट्री (36k से अधिक) जितना बड़ा हो सकते हैं। देखें मेरी C / C ++ गाइड जानकारी के लिए। C / C ++ के लिए, मैं GNU ग्लोबल का उपयोग करने का सुझाव देता हूं जो C, C ++, Yacc, Java, PHP4 और असेंबली का समर्थन करता है।

कुंजी यह है, यदि आप किसी भाषा की IDE विशेषताएँ चाहते हैं, तो आपको उस भाषा का प्लगइन स्थापित करना होगा। गतिशील भाषाओं के लिए यहां कुछ पैकेज दिए गए हैं, जिन्हें मैं जानता हूं:

  • लाइव वेब डेवलपमेंट: स्कीवर-मोड
  • जावास्क्रिप्ट: टर्न । लेकिन इससे पहले, js2-mode इंस्टॉल करना याद रखें । जैसा js2-modeकरता है, उसके लिए विवरण देखें ; लेकिन संक्षेप में, js2-modeएक पूर्ण जावास्क्रिप्ट पार्सर है जो उचित आईडीई सुविधाओं को करने के लिए एएसटी उत्पन्न करता है। यदि आप डिफ़ॉल्ट रूप skewer-modeसे स्थापित करते हैं, तो इस पर निर्भर करता है।js2-modeskewer-mode
  • पायथन: एलिफी , आईडीई सुविधाओं को देखें
  • रूबी: बागे इन सुविधाओं को प्रदान करता है:
  • विधि परिभाषा पर कूदें
  • सुपर या कंस्ट्रक्टर पर जाएं जिसे बिंदु पर बुलाया जाता है
  • मॉड्यूल या वर्ग पर जाएं (बशर्ते उसमें कम से कम एक विधि परिभाषित हो)
  • प्रदर्शन विधि प्रलेखन
  • ElDoc का उपयोग करके बिंदु पर बताई गई विधि के बारे में जानकारी प्रदर्शित करें
  • विधि और निरंतर नाम पूरा करना

तुम भी ctagsखोल स्क्रिप्ट या Tcl जैसे विशाल कई भाषाओं का समर्थन करने के लिए उपयोग कर सकते हैं ...


जावास्क्रिप्ट के लिए कोई सुझाव?
user2522280

@BarryG टर्न है और j2-modeमैंने अपने जवाब में संपादित किया।
Tu Do

2
मैं अपनी बात कहना चाहता हूं कि anacondaपायथन में परिभाषा कूदने के लिए और अधिक विशिष्ट समाधान हो सकता है।
पायथनटूट

@TuDo आपने ESS के तहत Robe की फीचर सूची डाल दी है।
दिमित्री

C ++ के लिए, rtags और ycmd भी है । मैं ycmd का उपयोग करता हूं, जो उदाहरण के लिए पायथन, C #, गो और अन्य भाषाओं के साथ भी काम करता है। मैं फॉल-बैक के रूप में डंब -जंप और काउंसलर-आरजी का उपयोग करता हूं या किसी प्रतीक के यूजेज या कमेंट / डॉक उल्लेखों को दिखाने के लिए करता हूं ।
अनहमर

20

मैं emacs के साथ एक समान मुद्दे में भाग गया, इसलिए मैंने डंब जंप किया । मैंने स्वीकार किए गए उत्तर में वर्णित कई समाधानों की कोशिश की, लेकिन मैं हमेशा निम्नलिखित मुद्दों में से एक या अधिक भाग गया:

  • समाधान केवल एक एकल प्रोग्रामिंग भाषा के लिए काम किया
  • समाधान के लिए एक सूचकांक (TAG) फ़ाइल या लगातार प्रक्रिया की आवश्यकता होती है

मैं बुरी तरह से एक समाधान चाहता था कि "बस काम किया" और अनुकूलन या सेटअप की आवश्यकता नहीं थी। यही है, मैं गितुब पर एक यादृच्छिक रेपो को क्लोन करना चाहता था और अपने स्वयं के किसी भी अन्य प्रोजेक्ट की तरह इसके चारों ओर नेविगेट करना चाहता था।

अभी डंब जंप के लिए मूल समर्थन है:

  • जावास्क्रिप्ट
  • Emacs लिस्प
  • अजगर
  • जाओ
  • पीएचपी
  • माणिक
  • Faust
  • आर
  • लुआ
  • जंग
  • ...और अधिक

यह MELPA और GitHub मुद्दों के माध्यम से उपलब्ध है और पीआरएस स्वागत से अधिक हैं।


4

Emacs में इसके लिए प्राथमिक समाधान TAGS फ़ाइलों का उपयोग किया जाता है, जो कि etags या gtags जैसे कार्यक्रमों द्वारा बनाई जाती हैं। जब मैं खोज गंतव्य कई स्थानों पर स्थित होता है, तो मैं आपको गंतव्य स्थानों को संकीर्ण करने में मदद करने के लिए अत्यधिक ctags और etags-select.el का उपयोग (और सलाह) करता हूं। समर्थित भाषाएँ काफी हैं, व्यक्तिगत टूल मैनुअल देखें। यहां तक ​​कि अपनी भाषा को जोड़ने के लिए भी समर्थन है, जिससे आप एक नियमित अभिव्यक्ति प्रदान कर सकते हैं जो ctags को निर्देश देती है कि आप जिस टैग में रुचि रखते हैं, उसे अलग कैसे करें।


1
ओह! मैं टैगफाइल्स के बारे में कैसे भूल सकता हूं? ctags -e -R *रूट निर्देशिका से इसे आपके लिए सेट किया जाएगा।
सीन एलेड

क्या यह स्वीकार्य समाधान है जब आपकी परियोजना में कई निर्भरताएं हैं (जैसे कि हाल ही में जावास्क्रिप्ट वेब देव परियोजनाएं)?
रुडोल्फ ओलाह

आश्रितों की संख्या स्वयं एक बाधा नहीं है। आपके पास या तो एक बड़ी टैग फ़ाइल हो सकती है जो कई अलग-अलग पुस्तकालयों को एकत्रित करती है; मैंने कई सालों तक ऐसा किया, ctags कमांड मंगलाचरण तुच्छ रूप से करता है। या जो अब मैं सुझाता हूं वह प्रति निर्भरता के लिए एक अलग टैग फ़ाइल है; Emacs कई टैग फ़ाइलों को लोड करने के लिए पर्याप्त स्मार्ट है। इसे कम करने के लिए, etags-table.el को खोजें, जो प्रति प्रोजेक्ट टैग फ़ाइलों के समूह को लोड करने में मदद करता है।
inHarmsWay
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.