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/… )M-. arbeitet im anaconda-modus (auf den ich nach problemen mit elpy umgestiegen bin).
Beachten Sie, dass Sie die richtige Python - Umgebung, in meinem Fall brauchen kann ich die folgende: -
mkvirtualenv someenv
-python setup.py develop
für alle Module oder Verwendung entwickeln (oder bevorzugen Quelle zu erreichen , statt der installierten Version) -M-x venv-workon
someenv
Pfade in Emacs zu ermöglichen.Dann habe ich configure
anaconda-mode
aktiv zu sein , wenn ich bearbeiten Python und voila,M-.
Werkequelle
Gute Frage, das ist nicht sofort verfügbar und ein nützliches Feature für ausgewachsene IDEs. Ich mache das mit
cscope
einer netten Helm-Oberfläche: http://wikemacs.org/wiki/Python#cscope Es kann Fragen wie "Wo ist dieses Symbol definiert? Wo wird es verwendet?" Beantworten.ps: im bösen modus können wir mit zur definition eines symboles in der gleichen datei gehen
gd
.quelle
gd
an das Böse findet nur das erste Vorkommen des Symbols in der Datei (trotz der docstring: "Gehe zur Definition oder das erste Vorkommen des Symbols unter Punkt.")M-.
das ist verpflichtet,elpy-goto-definition
den Trick zu tun. MitM-*
können Sie zur vorherigen Position im Puffer zurückspringen. Auf diese Weise können Sie schnell etwas überprüfen und zum vorherigen Speicherort zurückkehren.Ich benutze auch
C-c C-o
oft (elpy-occur-definitions
). Dies öffnet ein Fenster mit allen Klassen und Funktion ist der aktuelle Puffer. Wenn Sie in diesem Puffer auf drückenEnter
, gelangen Sie zur Definition im Quellcode.quelle
M-.
gebundenxref-find-definitions
undelpy-goto-definition
befindet sich auf keiner Taste (obwohl sie sich in Menüs befindet). Das Auffinden von Definitionen in Site-Paketen scheint überhaupt nicht zu funktionieren.Jedi ist eine großartige Bibliothek für die automatische Vervollständigung / statische Analyse von Python. Ich habe sie viel früher verwendet, als ich vim verwendet habe.
Genau wie die Golang-Autovervollständigungs-Engine (dh der Gocode) sowohl für Vim als auch für Emacs funktioniert, funktioniert dieselbe Jedi-Engine sowohl für Vim als auch für Emacs .
quelle