PyCharm की जिस विशेषता का आप उल्लेख करते हैं, वह मेरे पसंदीदा में से एक थी, और पहली चीजों में से एक जिसे मैंने PyCharm को Emacs के साथ पूरी तरह से बदलने की कोशिश में देखा था (जो मुझे यह कहने में खुशी है कि मैं करने में सक्षम हूं)।
जैसा कि एक अन्य उत्तर में उल्लेख किया गया है कि elpyपैकेज में यह सुविधा है (कई अन्य उपयोगी आईडीई सुविधाओं के अलावा )। हालाँकि, यदि आप elpy-goto-definitionबिंदु पर प्रतीक को देखने के लिए उपयोग करते हैं, तो आप जल्द ही या बाद में पाएंगे कि कुछ मामलों में जहां PyCharm आपको ढूंढने में सफल elpyहोगा , वह नहीं होगा। डॉक्स कहते हैं:
बैकएंड हमेशा इस बात की पहचान नहीं कर सकता है कि बिंदु किस तरह का प्रतीक है। विशेष रूप से कुछ अप्रत्यक्ष के बाद, उन्हें मूल रूप से सही अनुमान लगाने की कोई उम्मीद नहीं है, इसलिए वे नहीं करते हैं
इस मामले में, आह्वान elpy-goto-definitionकुछ नहीं करेगा और इको क्षेत्र में थोड़ा त्रुटि संदेश दिखाएगा। जब ऐसा होता है, तो निश्चित रूप से आप अभी भी वही ढूंढना चाहते हैं जो आप ढूंढ रहे हैं, और elpyआपको फांसी पर नहीं छोड़ना चाहिए। इस तरह की स्थिति में मैं हमेशा प्रतीक का उपयोग करता हूं C-c C-s( elpy-rgrep-symbol) rgrepमैं जिस भी परियोजना में हूं उस बिंदु पर। कम से कम मेरे लिए, जिस चीज को मैं कम या ज्यादा ढूंढ रहा हूं वह हमेशा rgrepपरिणामों में दिखाई देती है। वास्तव में, मुझे लगता है कि यह PyCharm के समान है: यदि आप किसी चीज़ की परिभाषा देखने की कोशिश करते हैं और PyCharm को यह सुनिश्चित नहीं है कि इसे कहाँ परिभाषित किया गया है, तो यह आपके पास एक सूची से चुनना होगा। मैं वास्तव में elpyकार्यान्वयन को प्राथमिकता देता हूं , क्योंकि एक क्षणिक सूची के बजाय जब आप पहले विकल्प पर जाते हैं तो गायब हो जाते हैं,elpy-rgrep-symbol एक अन्य बफर में खुली संभावनाओं की सूची को छोड़ देगा ताकि आप यदि आवश्यक हो तो उनके बीच आगे और पीछे कूद सकें।
चूंकि मेरा वर्कफ़्लो लगभग हमेशा पहले कॉल करने के लिए होता है elpy-goto-definitionऔर यदि यह विफल रहता है, तो कॉल करें elpy-rgrep-symbol, मैंने एक साधारण फ़ंक्शन को एक साथ हैक करने का फैसला किया जो विफल होने पर बस elpy-rgrep-symbolस्वचालित रूप से कॉल करता elpy-goto-definitionहै। वह फ़ंक्शन निम्न है:
(defun goto-def-or-rgrep ()
"Go to definition of thing at point or do an rgrep in project if that fails"
(interactive)
(condition-case nil (elpy-goto-definition)
(error (elpy-rgrep-symbol (thing-at-point 'symbol)))))
फिर मैं इसे M-.(डिफ़ॉल्ट बाइंडिंग के लिए elpy-goto-definition) बांधता हूं ।
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
इस तरह मैं अपने पसंदीदा संपादक में अपने पसंदीदा PyCharm सुविधाओं में से एक का उपयोग कर सकता हूं। मुझे पता है कि यह एक पुराना प्रश्न है और आप पहले से ही इस समस्या को हल कर सकते हैं या आगे बढ़ सकते हैं, लेकिन मुझे आशा है कि आपको या किसी और को यह उपयोगी लगता है!
python-modeकि Emacs डिफ़ॉल्ट रूप से है। ( stackoverflow.com/questions/11363089/… )