Das Feature von PyCharm, das Sie erwähnen, war eines meiner Favoriten und eines der ersten Dinge, nach denen ich gesucht habe, um PyCharm vollständig durch Emacs zu ersetzen (was ich gerne sagen kann).
Wie in einer anderen Antwort erwähnt, verfügt das elpyPaket über diese Funktion (zusätzlich zu vielen anderen nützlichen IDE-Funktionen ). Wenn Sie elpy-goto-definitionjedoch das Symbol an einer Stelle nachschlagen, werden Sie früher oder später feststellen, dass PyCharm in einigen Fällen nicht das finden kann, wonach Sie suchen elpy. Wie die Dokumente sagen:
Die Backends können nicht immer erkennen, um welche Art von Symbol es sich handelt. Vor allem nach ein paar Umwegen haben sie im Grunde keine Hoffnung, richtig zu raten, also tun sie es nicht
In diesem Fall bewirkt der Aufruf elpy-goto-definitionnichts und zeigt eine kleine Fehlermeldung im Echobereich an. In diesem Fall möchten Sie natürlich immer noch das finden, wonach Sie suchen, und elpylassen Sie nicht hängen. In solchen Situationen benutze ich immer C-c C-s( elpy-rgrep-symbol) rgrepfür das Symbol an der Stelle, an der sich das Projekt befindet. Zumindest für mich zeigt sich das, wonach ich suche, mehr oder weniger immer in den rgrepErgebnissen. Eigentlich denke ich, dass dies ähnlich ist, wie PyCharm es auch tut: Wenn Sie versuchen, die Definition von etwas nachzuschlagen und PyCharm nicht sicher ist, wo es definiert ist, müssen Sie aus einer Liste auswählen. Eigentlich bevorzuge ich die elpyImplementierung, da anstelle einer vorübergehenden Liste, die verschwindet, wenn Sie zur ersten Option wechseln,elpy-rgrep-symbol wird die Liste der Möglichkeiten in einem anderen Puffer offen lassen, so dass Sie bei Bedarf zwischen ihnen hin und her springen können.
Da sich mein Workflow fast immer auf den ersten Aufruf elpy-goto-definitionbezieht und der Aufruf fehlschlägt, habe elpy-rgrep-symbolich beschlossen, eine einfache Funktion zu hacken, die nur elpy-rgrep-symbolautomatisch aufruft , wenn der Aufruf elpy-goto-definitionfehlschlägt. Diese Funktion ist unten:
(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)))))
Dann binde ich dies an M-.(die Standardbindung für elpy-goto-definition).
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
Auf diese Weise kann ich eine meiner bevorzugten PyCharm-Funktionen in meinem bevorzugten Editor verwenden. Ich weiß, dass dies eine alte Frage ist, und Sie haben dieses Problem vielleicht bereits gelöst oder sind weitergegangen, aber ich hoffe, dass Sie oder jemand anderes dies nützlich finden!
python-mode, was Emacs standardmäßig hat. ( stackoverflow.com/questions/11363089/… )