La fonctionnalité de PyCharm que vous mentionnez était l'une de mes préférées, et l'une des premières choses que j'ai recherchées en essayant de remplacer complètement PyCharm par Emacs (ce que je suis heureux de dire que j'ai pu le faire).
Comme mentionné dans une autre réponse, le elpypackage a cette fonctionnalité (en plus de nombreuses autres fonctionnalités IDE utiles ). Cependant, si vous utilisez elpy-goto-definitionpour rechercher le symbole au point, vous constaterez tôt ou tard que dans certains cas où PyCharm réussirait à trouver ce que vous cherchez, elpyne le fera pas. Comme le disent les docs:
les backends ne peuvent pas toujours identifier quel type de symbole est au point. Surtout après quelques indirections, ils n'ont pratiquement aucun espoir de deviner correctement, donc ils ne le font pas
Dans ce cas, l'invocation elpy-goto-definitionne fera rien et affichera un petit message d'erreur dans la zone d'écho. Lorsque cela se produit, bien sûr, vous voulez toujours trouver ce que vous cherchez et elpyne vous laissez pas pendre. Dans ce genre de situation, j'utilise toujours C-c C-s( elpy-rgrep-symbol) rgreppour le symbole au point dans n'importe quel projet dans lequel je suis. Au moins pour moi, la chose que je recherche apparaît plus ou moins toujours dans les rgreprésultats. En fait, je pense que cela est similaire à ce que PyCharm fait aussi: si vous essayez de rechercher la définition de quelque chose et que PyCharm n'est pas sûr de l'endroit où il est défini, vous devrez choisir dans une liste. En fait, je préfère elpyl'implémentation de, car plutôt qu'une liste transitoire qui disparaît lorsque vous passez à la première option,elpy-rgrep-symbol laissera la liste des possibilités ouverte dans un autre tampon afin que vous puissiez aller et venir entre eux si nécessaire.
Étant donné que mon flux de travail est presque toujours le premier appel elpy-goto-definitionet s'il échoue, appel elpy-rgrep-symbol, j'ai décidé de pirater ensemble une fonction simple qui n'appelle elpy-rgrep-symbolautomatiquement qu'en cas d' elpy-goto-definitionéchec. Cette fonction est ci-dessous:
(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)))))
Ensuite, je lie ceci à M-.(la liaison par défaut pour elpy-goto-definition).
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
De cette façon, je peux utiliser l'une de mes fonctionnalités PyCharm préférées dans mon éditeur préféré. Je sais que c'est une sorte de vieille question et vous avez peut-être déjà résolu ce problème ou vous êtes passé à autre chose, mais j'espère que vous ou quelqu'un d'autre le trouverez utile!
python-modecelui qu'Emacs possède par défaut. ( stackoverflow.com/questions/11363089/… )