2010-08-17 8 views
17

क्या अजगर के लिए कीचड़ के बराबर है?मैं मेटा-डॉट (एम-।) का उपयोग पायथन में emacs के साथ कैसे कर सकता हूं?

उदाहरण के लिए, यदि मैं कर्सर को foo() पर रखता हूं और एम- करता हूं। (परिभाषा के लिए कूद) मैं समारोह foo के स्रोत परिभाषा को देखने के लिए

यह है कि क्या foo कुछ में

1) स्थानीय परियोजना निर्देशिका

2) में है की परवाह किए बिना काम करना चाहिए चाहते हैं ~/.virtualenvs/बार/lib/कुछ अन्य अजगर-पथ

4) आभासी env उपयोग (यानी, यह मेरे वर्तमान virtualenv में देखना चाहिए)

में है में साइट-संकुल

3)

क्या पिमैक/रोपेमैक संयोजन इनमें से कोई भी करता है?

+1

मैं स्लिम के समतुल्य को पसंद करूंगा, जो कहने के लिए है, कोड/अर्थात् स्तर पर पाइथन को जो कुछ भी पाठ स्तर पर नहीं है। रोपेमैक या पिमैक जो मैं चाहता हूं वह हो सकता है, हालांकि मुझे नहीं पता कि यह एम- के साथ मदद करता है या नहीं। किसी भी प्रकार। – nunb

उत्तर

11

और -e आप etags उपयोग कर सकते हैं से बचने के लिए एक आप रिकर्सिवली py फ़ाइल जोड़ने लगता है के साथ:

find . -type f -name '*.py' | xargs etags 
+0

हाँ, लेकिन प्रासंगिक .py फ़ाइलें मेरे कोड की उपनिर्देशिका में नहीं हैं, वे ~/.virtualenv में हैं जबकि मैं ~/src/project/foo – nunb

+0

में काम करता हूं यह पता लगाने के साथ कि आप अपनी इच्छित निर्देशिका का उपयोग कर सकते हैं: 'ढूंढें ~/.virtualenv -type f -name '* .py' | xargs etags' – mathk

+0

मुझे लगता है कि यह वर्चुअलएन्क हुक के लिए कॉल करता है, ताकि टैग स्वचालित रूप से जेनरेट की जा सकने वाली निर्देशिका + वर्चुअलएन्व कॉम्बो उपयोगकर्ता के लिए जेनरेट हो सकें। – nunb

4

एम-। आमतौर पर "find-tag" फ़ंक्शन चलाता है। आपको अपनी पायथन स्रोत फ़ाइलों की एक TAGS फ़ाइल बनाना चाहिए। फिर आप एक एम- करने से पहले "visit-tags-table"। इस तरह, Emacs टैग की सभी परिभाषाओं पर कूद जाएगा। टाइप सी-यू एम-। अपने टैग की अगली परिभाषा को कूदने के लिए। सहायता के लिए खोज-टैग दस्तावेज़ देखें। Emacs को यह जानने में सहायता करें कि पायथन स्रोत फ़ाइलों से TAGS फ़ाइल कैसे बनाएं।

उदाहरण के लिए आप TAGS फ़ाइल बनाने के लिए Exuberant Ctags का उपयोग कर सकते हैं।

जाओ अपने अजगर फ़ाइलों के रूट निर्देशिका में हैं और इस कार्य करें:

ctags -e -R . 

एक टैग फ़ाइल सामान्य रूप से परियोजना की मूल निर्देशिका में बनाया जाता है।

+3

मैं अनुशंसा करता हूं कि http://www.emacswiki.org/emacs/Etags भी चयन करें, जो एक अच्छा इंटरफ़ेस प्रदान करता है यदि आप 'एम-.'' को 'etags-select-find-tag' – phils

+0

पर रूट करते हैं तो रूट में एक etags के साथ , और कई परियोजनाएं एक ही पैकेज के विभिन्न इंस्टॉलेशन (एकाधिक साइट-पैकेज?) के बीच उलझन में नहीं आतीं। या कम से कम, हर बार जब यह एक बफर पॉप अप करता है तो मुझसे पूछता है * कौन सा * स्रोत defn मैं जाना चाहता था? – nunb

+0

आप अपनी प्रत्येक परियोजना के लिए अपनी संबंधित रूट निर्देशिका (सिस्टम की रूट निर्देशिका/नहीं) पर एक टैग फ़ाइल बनाते हैं। फिर आप रुचि रखने वाली प्रत्येक TAGS फ़ाइल पर 'विज़िट-टैग-टेबल' का उपयोग करते हैं। सभी टैग्स फाइल संदर्भ 'टैग-टेबल-सूची' चर में संलग्न हैं। फिर, एम- का उपयोग कर। , emacs 'टैग-टेबल-सूची' में संदर्भित सभी TAGS फ़ाइलों में कीवर्ड की खोज करता है। –

2

निम्नलिखित अनुक्रमण किया जाएगा अपने वर्तमान परियोजना

find . -type f -name '*.py' | xargs etags

लेकिन अगर आप अपने आयातित libs इंडेक्स करना चाहते हैं। आप पहले अपना वर्चुअलएनवी सक्रिय करते हैं। फिर which पाइथन का उपयोग यह पता लगाने के लिए करें कि आपकी libs कहां हैं और फिर उन्हें etags पर पाइप करें।

workon my-project # if using virtualenvwrappwer 
source bin/activate # if using virtualenv 

find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags 
6

यहां वर्णित अधिकांश उत्तरों पुराने हैं। एटैग के बिना M-. के लिए एल्पी का उपयोग करना एक आसान समाधान है (जिसके लिए अतिरिक्त काम की आवश्यकता है)।

elpy as mentioned here इंस्टॉल करें।

M-x package-install elpy 

और उसके बाद स्थापित अजगर संकुल

$ sudo pip install rope jedi 

पुनः प्रारंभ Emacs, किसी भी अजगर फ़ाइल को खोलने और M-.

Elpy पूरी तरह से प्रलेखित है चलाने के लिए, आप about M-. here पढ़ सकते हैं।

0

स्वीकृत उत्तर एक महत्वपूर्ण बिंदु को याद करता है, यदि आप etagsfind . -type f -name '*.py' | xargs etags जैसे निष्पादित करते हैं तो प्रत्येक फ़ाइल फ़ाइल प्रत्येक फ़ाइल के लिए हर बार उत्पन्न की जाएगी।

यह

rm -f TAGS 
find . -type f -name '*.py' -print0 | xargs -0 etags --append 

भी तरह --append के साथ मौजूदा टैग फाइल करने के लिए डेटा संलग्न करने के लिए यदि आप आभासी env साइट संकुल से पहचानकर्ता शामिल करना चाहते है ऐसा करने के लिए सही तरीका निर्देशिका (जैसे: ~/.virtualenvs/bar/lib/site-packages):

SITEPACKAGES=$(cdvirtualenv;pwd)/lib/python3.6/site-packages/ 
find $SITEPACKAGES -type f -name '*.py' -print0 | xargs -0 etags -a 

* अपने वर्तमान अजगर संस्करण के लिए python3.6 समायोजित

0

Emacs केप्रयास करें 10 और company-anaconda पैकेज। अद्यतन config:

(eval-after-load "company" 
'(add-to-list 'company-backends 'company-anaconda)) 
(add-hook 'python-mode-hook 'anaconda-mode) 
(add-hook 'python-mode-hook 'company-mode) 

स्विच pythonic-activate साथ virtualenv के लिए, अगर आपके पास है।

अब आपके पास M-. है और आप वापस जाने के लिए M-* दबा सकते हैं!

संबंधित मुद्दे

 संबंधित मुद्दे