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/… )M-. fonctionne en mode anaconda (auquel je suis passé après avoir eu des problèmes avec elpy).
Notez que vous avez besoin d'un environnement python approprié, dans mon cas, je fais ce qui suit: -
mkvirtualenv someenv
-python setup.py develop
pour tous les modules à développer ou à utiliser (ou préfèrent atteindre la source plutôt que la version installée) -M-x venv-workon
someenv
pour activer les chemins dans emacs.Ensuite, je configure
anaconda-mode
pour être actif chaque fois que je modifie python et le tour est joué,M-.
fonctionnela source
Bonne question, qui n'est pas disponible dès le départ et est une fonctionnalité pratique des IDE complets. Je le fais avec
cscope
, avec une belle interface de barre: http://wikemacs.org/wiki/Python#cscope Il peut répondre à des questions comme "où ce symbole est-il défini? Où est-il utilisé?".ps: en mode diabolique on peut aller à la définition d'un symbole dans le même fichier avec
gd
.la source
gd
que le mal ne trouve que la première occurrence du symbole dans le fichier (malgré la docstring: "Aller à la définition ou la première occurrence du symbole sous le point.")M-.
quielpy-goto-definition
ne manquera pas de faire l'affaire. L'utilisationM-*
vous permettra de revenir à l'emplacement précédent dans le tampon. Cela vous permet de vérifier rapidement quelque chose et de revenir à l'emplacement précédent.J'utilise aussi
C-c C-o
souvent (elpy-occur-definitions
). Cela ouvrira une fenêtre avec toutes les classes et la fonction est le tampon actuel. À partir de ce tampon, appuyezEnter
sur vous atterrira sur la définition dans le code source.la source
M-.
est lié àxref-find-definitions
etelpy-goto-definition
n'est sur aucune touche par défaut (bien qu'il soit dans les menus). La recherche de définitions dans les packages de sites ne semble pas du tout fonctionner correctement.Jedi est une impressionnante bibliothèque d'auto-complétion / analyse statique pour Python, je l'ai beaucoup utilisée lorsque j'utilisais vim.
Tout comme le moteur d'auto-complétion golang (c'est-à-dire gocode) fonctionne à la fois pour vim et emacs, le même moteur Jedi fonctionne à la fois pour vim et emacs .
la source