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 elpy
Paket über diese Funktion (zusätzlich zu vielen anderen nützlichen IDE-Funktionen ). Wenn Sie elpy-goto-definition
jedoch 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-definition
nichts und zeigt eine kleine Fehlermeldung im Echobereich an. In diesem Fall möchten Sie natürlich immer noch das finden, wonach Sie suchen, und elpy
lassen Sie nicht hängen. In solchen Situationen benutze ich immer C-c C-s
( elpy-rgrep-symbol
) rgrep
fü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 rgrep
Ergebnissen. 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 elpy
Implementierung, 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-definition
bezieht und der Aufruf fehlschlägt, habe elpy-rgrep-symbol
ich beschlossen, eine einfache Funktion zu hacken, die nur elpy-rgrep-symbol
automatisch aufruft , wenn der Aufruf elpy-goto-definition
fehlschlä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/… )