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 elpy
package a cette fonctionnalité (en plus de nombreuses autres fonctionnalités IDE utiles ). Cependant, si vous utilisez elpy-goto-definition
pour rechercher le symbole au point, vous constaterez tôt ou tard que dans certains cas où PyCharm réussirait à trouver ce que vous cherchez, elpy
ne 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-definition
ne 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 elpy
ne vous laissez pas pendre. Dans ce genre de situation, j'utilise toujours C-c C-s
( elpy-rgrep-symbol
) rgrep
pour 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 rgrep
ré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 elpy
l'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-definition
et s'il échoue, appel elpy-rgrep-symbol
, j'ai décidé de pirater ensemble une fonction simple qui n'appelle elpy-rgrep-symbol
automatiquement 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-mode
celui qu'Emacs possède par défaut. ( stackoverflow.com/questions/11363089/… )